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
private RedisTemplate redisTemplate;
private static String serviceName;
@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}")
private String username;
public void setUsername(String username) {
RefinitivConsumer.username = username;
}
private static String 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}")
private String clientId;
public void setClientId(String clientId) {
RefinitivConsumer.clientId = clientId;
}
private static long timeout;
@Value("${refinitiv.market-data.batch-request-timeout}")
private long timeout;
public void setTimeout(long timeout) {
RefinitivConsumer.timeout = timeout;
}
@Value("${refinitiv.token.username}")
@@ -79,7 +94,7 @@ public class RefinitivConsumer implements ApplicationRunner {
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_GAINERS_SYMBOL = ".PG.BO";
@@ -89,6 +104,34 @@ public class RefinitivConsumer implements ApplicationRunner {
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 {
String[] items = symbol.split(",");
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]);
if (CollUtil.isEmpty(topSymbols)) {
return list;
}
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");
}
@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 {
ElementList eList = EmaFactory.createElementList();
OmmArray array = EmaFactory.createOmmArray();
@@ -246,7 +282,12 @@ public class RefinitivConsumer implements ApplicationRunner {
array.add(EmaFactory.createOmmArrayEntry().ascii(instr));
}
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
bRequest.await();