RefinitivConsumer改由单例模式获取

This commit is contained in:
zhangjian
2024-05-10 13:40:02 +08:00
parent 3e505bd05b
commit 7ea8b2dc07

View File

@@ -51,20 +51,35 @@ public class RefinitivConsumer implements ApplicationRunner {
@Resource @Resource
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
private static String serviceName;
@Value("${refinitiv.market-data.service-name}") @Value("${refinitiv.market-data.service-name}")
private String serviceName; public void setServiceName(String serviceName) {
RefinitivConsumer.serviceName = serviceName;
}
private static String username;
@Value("${refinitiv.market-data.username}") @Value("${refinitiv.market-data.username}")
private String username; public void setUsername(String username) {
RefinitivConsumer.username = username;
}
private static String password;
@Value("${refinitiv.market-data.password}") @Value("${refinitiv.market-data.password}")
private String password; public void setPassword(String password) {
RefinitivConsumer.password = password;
}
private static String clientId;
@Value("${refinitiv.market-data.clientId}") @Value("${refinitiv.market-data.clientId}")
private String clientId; public void setClientId(String clientId) {
RefinitivConsumer.clientId = clientId;
}
private static long timeout;
@Value("${refinitiv.market-data.batch-request-timeout}") @Value("${refinitiv.market-data.batch-request-timeout}")
private long timeout; public void setTimeout(long timeout) {
RefinitivConsumer.timeout = timeout;
}
@Value("${refinitiv.token.username}") @Value("${refinitiv.token.username}")
@@ -79,7 +94,7 @@ public class RefinitivConsumer implements ApplicationRunner {
private String tokenUrl; private String tokenUrl;
private OmmConsumer consumer = null; private static OmmConsumer consumer = null;
public static final String TOP_ACTIVES_SYMBOL = ".AV.BO"; public static final String TOP_ACTIVES_SYMBOL = ".AV.BO";
public static final String TOP_GAINERS_SYMBOL = ".PG.BO"; public static final String TOP_GAINERS_SYMBOL = ".PG.BO";
@@ -89,6 +104,34 @@ public class RefinitivConsumer implements ApplicationRunner {
public static final String GRANT_TYPE = "password"; public static final String GRANT_TYPE = "password";
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("Initialize the consumer and connect to market data system....");
initialize();
}
private static void initialize() {
log.info("Initialize the consumer and connect to market data system....start");
OmmConsumerConfig config = EmaFactory.createOmmConsumerConfig();
config.username(username)
.password(password)
.clientId(clientId)
.consumerName("Consumer_4");
consumer = EmaFactory.createOmmConsumer(config);
log.info("Initialize the consumer and connect to market data system....end");
}
public static OmmConsumer getConsumer() {
if (consumer == null) {
synchronized (RefinitivConsumer.class) {
if (consumer == null) {
initialize();
}
}
}
return consumer;
}
public InstrumentData[] getDataBySymbol(String symbol) throws Exception { public InstrumentData[] getDataBySymbol(String symbol) throws Exception {
String[] items = symbol.split(","); String[] items = symbol.split(",");
log.info("Quote request for: {}", java.util.Arrays.toString(items)); log.info("Quote request for: {}", java.util.Arrays.toString(items));
@@ -214,6 +257,9 @@ public class RefinitivConsumer implements ApplicationRunner {
} }
List<String> topSymbols = RefinitivUtil.decodeTopData(result[0]); List<String> topSymbols = RefinitivUtil.decodeTopData(result[0]);
if (CollUtil.isEmpty(topSymbols)) {
return list;
}
return getStockList(String.join(",", topSymbols)); return getStockList(String.join(",", topSymbols));
} }
@@ -229,16 +275,6 @@ public class RefinitivConsumer implements ApplicationRunner {
StrUtil.containsAny(dataState, "Suspect", "NotFound", "**The record could not be found", "CLOSED"); StrUtil.containsAny(dataState, "Suspect", "NotFound", "**The record could not be found", "CLOSED");
} }
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("Initialize the consumer and connect to market data system....");
OmmConsumerConfig config = EmaFactory.createOmmConsumerConfig();
config.username(username);
config.password(password);
config.clientId(clientId);
consumer = EmaFactory.createOmmConsumer(config.consumerName("Consumer_4"));
}
public void synchronousRequest(Batch bRequest) throws Exception { public void synchronousRequest(Batch bRequest) throws Exception {
ElementList eList = EmaFactory.createElementList(); ElementList eList = EmaFactory.createElementList();
OmmArray array = EmaFactory.createOmmArray(); OmmArray array = EmaFactory.createOmmArray();
@@ -246,7 +282,12 @@ public class RefinitivConsumer implements ApplicationRunner {
array.add(EmaFactory.createOmmArrayEntry().ascii(instr)); array.add(EmaFactory.createOmmArrayEntry().ascii(instr));
} }
eList.add(EmaFactory.createElementEntry().array(EmaRdm.ENAME_BATCH_ITEM_LIST, array)); eList.add(EmaFactory.createElementEntry().array(EmaRdm.ENAME_BATCH_ITEM_LIST, array));
consumer.registerClient(EmaFactory.createReqMsg().serviceName(serviceName).payload(eList).interestAfterRefresh(false), new RefinitivAppClient(), bRequest); try {
getConsumer().registerClient(EmaFactory.createReqMsg().serviceName(serviceName).payload(eList).interestAfterRefresh(false), new RefinitivAppClient(), bRequest);
} catch (NullPointerException e) {
initialize();
getConsumer().registerClient(EmaFactory.createReqMsg().serviceName(serviceName).payload(eList).interestAfterRefresh(false), new RefinitivAppClient(), bRequest);
}
// wait for batch to be fulfilled // wait for batch to be fulfilled
bRequest.await(); bRequest.await();