@Bean public Executor executionPool(NotificationHandler notificationHandler, WebSocketKafkaProxyConfig proxyConfig) { Executor executionPool = Executors.newFixedThreadPool(proxyConfig.getWorkerThreads()); for (int i = 0; i < proxyConfig.getWorkerThreads(); i++) { executionPool.execute(() -> { WebSocketKafkaProxyClient client = new WebSocketKafkaProxyClient(notificationHandler); client.setWebSocketKafkaProxyConfig(proxyConfig); client.start(); client.push(ProxyMessageBuilder.create(new TopicsPayload(REQUEST_TOPIC))).join(); client.push(ProxyMessageBuilder.subscribe(new SubscribePayload(REQUEST_TOPIC, proxyConfig.getConsumerGroup()))).join(); }); } return executionPool; }
@Override public void push(Request request) { if (request.getBody() == null) { throw new NullPointerException("Request body must not be null."); } request.setReplyTo(replyToTopic); client.push(ProxyMessageBuilder.notification( new NotificationCreatePayload(requestTopic, gson.toJson(request), request.getPartitionKey()))); }
@Override public void start() { client.start(); client.push(ProxyMessageBuilder.create(new TopicsPayload(Arrays.asList(requestTopic, replyToTopic)))).join(); UUID uuid = UUID.randomUUID(); Executor executionPool = Executors.newFixedThreadPool(proxyConfig.getWorkerThreads()); for (int i = 0; i < proxyConfig.getWorkerThreads(); i++) { executionPool.execute(() -> { WebSocketKafkaProxyClient client = new WebSocketKafkaProxyClient(notificationHandler); client.setWebSocketKafkaProxyConfig(proxyConfig); client.start(); client.push(ProxyMessageBuilder.subscribe(new SubscribePayload(replyToTopic, uuid.toString()))).join(); }); } pingServer(); }
@Override public void register(Filter filter, Subscriber subscriber) { processRegister(filter, subscriber); String subscribeMessage = gson.toJson(new SubscribeMessage(REGISTER, filter, subscriber)); proxyClient.push(ProxyMessageBuilder.notification( new NotificationCreatePayload(SUBSCRIPTION_TOPIC, subscribeMessage))).thenAccept(message -> { if (message.getStatus() == null || message.getStatus() != 0) { MessagePayload payload = (MessagePayload) message.getPayload(); throw new HiveException("Response message is failed: " + payload.getMessage()); } }); }
@Override public void unregister(Subscriber subscriber) { processUnregister(subscriber); String subscribeMessage = gson.toJson(new SubscribeMessage(UNREGISTER, subscriber)); proxyClient.push(ProxyMessageBuilder.notification( new NotificationCreatePayload(SUBSCRIPTION_TOPIC, subscribeMessage))).thenAccept(message -> { if (message.getStatus() == null || message.getStatus() != 0) { MessagePayload payload = (MessagePayload) message.getPayload(); throw new HiveException("Response message is failed: " + payload.getMessage()); } }); } }
logger.debug("Request callback added for request: {}, correlationId: {}", request.getBody(), request.getCorrelationId()); client.push(ProxyMessageBuilder.notification( new NotificationCreatePayload(requestTopic, gson.toJson(request), request.getPartitionKey())));
public DistributedProxyFilterRegistry(Gson gson, WebSocketKafkaProxyConfig proxyConfig) { this.gson = gson; this.proxyClient = new WebSocketKafkaProxyClient((message, proxyClient) -> handleSubscriptionMessage(message, gson)); proxyClient.setWebSocketKafkaProxyConfig(proxyConfig); proxyClient.start(); proxyClient.push(ProxyMessageBuilder.subscribe(new SubscribePayload(SUBSCRIPTION_TOPIC, "fr-" + UUID.randomUUID()))).thenAccept(message -> { if (message.getStatus() == null || message.getStatus() != 0) { MessagePayload payload = (MessagePayload) message.getPayload(); throw new HiveException("Response message is failed: " + payload.getMessage()); } }); }