From 7ea8b2dc07a8d60aa6df3618638e25c4ae29108c Mon Sep 17 00:00:00 2001 From: zhangjian Date: Fri, 10 May 2024 13:40:02 +0800 Subject: [PATCH] =?UTF-8?q?RefinitivConsumer=E6=94=B9=E7=94=B1=E5=8D=95?= =?UTF-8?q?=E4=BE=8B=E6=A8=A1=E5=BC=8F=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stock/market/lesg/RefinitivConsumer.java | 75 ++++++++++++++----- 1 file changed, 58 insertions(+), 17 deletions(-) diff --git a/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java b/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java index 198b209..b2776f2 100644 --- a/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java +++ b/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java @@ -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 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();