当前位置: 首页 > 知识库问答 >
问题:

Sleuth不适用于websocket客户端

闻华容
2023-03-14

我有一个连接到WebSocket服务器并从服务器接收消息的微服务。我想在这个应用程序中集成Sleuth,因为这是我的一组微服务的网关。但是当我连接到WebSocket服务器并开始接收消息时,我无法在日志中跟踪ID,spanid。我期待着这样的事情:

2018-08-09 11:26:20.222  INFO [kumarman-betsync-adapter-service-v2,0a011711c2470359,0a011711c2470359,true] 7230 --- [ient-SecureIO-2] c.b.b.a.service.BetSyncEventIdExtractor  : SubscribeResponse feed received for eventId=7519016
2018-08-09 11:26:20.224  INFO [kumarman-betsync-adapter-service-v2,0a011711c2470359,2b028dadad5c440d,true] 7230 --- [ient-SecureIO-2] c.b.b.a.k.message.KafkaMessageSender     : sent payload to topic='betsyncEventTopic'

但我得到了:

2018-08-09 11:26:20.222  INFO [kumarman-betsync-adapter-service-v2,,,] 7230 --- [ient-SecureIO-2] c.b.b.a.service.BetSyncEventIdExtractor  : SubscribeResponse feed received for eventId=7519016
2018-08-09 11:26:20.224  INFO [kumarman-betsync-adapter-service-v2,,,] 7230 --- [ient-SecureIO-2] c.b.b.a.k.message.KafkaMessageSender     : sent payload to topic='betsyncEventTopic'

我的代码如下:

  @Service
    @Slf4j
    @AllArgsConstructor
    public class BetsyncWebsocketAdapter {

        private final BetsyncWebSocketHandler betsyncWebSocketHandler;

        public void startNewConnection() {
                try {
                    webSocketSession = new StandardWebSocketClient().doHandshake(
                            betsyncWebSocketHandler,
                            new WebSocketHttpHeaders(),
                            new URI(getBetsyncConnectionUrl()))
                            .get(KafkaAdminClient.MAX_TIME_LIMIT_TO_CONNECT, TimeUnit.SECONDS);
                } catch (Exception e) {
                    log.error("exception occurred", e);
                }
        }

        /**
         * This will start the new connection after server start
         */
        @EventListener(ApplicationReadyEvent.class)
        public void onServerStart() {
            startNewConnection();
        }
    }

@Slf4j
@Service
@AllArgsConstructor
public class BetsyncWebSocketHandler extends TextWebSocketHandler {

    private static StringBuilder betSyncMessage = new StringBuilder();

    private final LoginRequestBuilder loginRequestBuilder;
    private final BetsyncMessageProcessing betsyncMessageProcessing;

    @Override
    public void afterConnectionEstablished(final WebSocketSession session) throws IOException {
        session.sendMessage(new TextMessage(loginRequestBuilder.getLoginRequestDto()));
    }

    @Override
    protected void handleTextMessage(final WebSocketSession session, final TextMessage message) {
        betSyncMessage.append(message.getPayload());
        if (message.isLast()) {
            betsyncMessageProcessing.process(betSyncMessage.toString());
            betSyncMessage = new StringBuilder();
        } else {
            log.debug("we have received a partial message starting with {}", getFirstXCharacter(message.getPayload(), 50));
        }
    }

    @Override
    protected void handlePongMessage(final WebSocketSession session, final PongMessage message) {
        log.info("Response for Ping message received from the server");
    }

    @Override
    public boolean supportsPartialMessages() {
        return true;
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        log.error("server connection closed");
    }
}

我们的pom条目包括:

<dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
        <spring.boot.version>2.0.3.RELEASE</spring.boot.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>

共有1个答案

高弘光
2023-03-14

您正在自己创建套接字处理

 webSocketSession = new StandardWebSocketClient().doHandshake(
                            betsyncWebSocketHandler,
                            new WebSocketHttpHeaders(),
                            new URI(getBetsyncConnectionUrl()))
                            .get(KafkaAdminClient.MAX_TIME_LIMIT_TO_CONNECT, TimeUnit.SECONDS);

当您直接使用Spring集成组件时,Spring Cloud Sleuth支持WebSockets。由于您是手动执行操作,因此您必须确保跟踪上下文得到传播并且您可以自己读取它。

 类似资料:
  • 我使用Spring Boot开发了这个websocket服务器。服务器与基于js的客户机配合得很好。 控制器: 这是服务器端。现在,对于客户机,我已经创建了一个@ClientEndpoint,当我连接到URI“ws://localhost:8080/spring-mvc-java/chat”时,我能够建立一个连接,并且可以看到@ClientEndpoint的@OnOpen回调被触发。 但是,use

  • 问题内容: 我正在开发一个项目,该项目需要解析一些受保护的网页中的数据。为了获得对这些页面的访问权限,我必须克服SAML身份验证形式(Shibboleth)。是否有人能够在Android(Java)中实现此标准?我已经读过这个线程:Android的SAML客户端实现? 但这并不能给我一个很好的解决方案。实际上,我需要 获取某些受保护网页的数据 以便对其进行解析,而不是让用户看到此类网页的内容。因此

  • 问题内容: 有人知道iOS的Elasticsearch客户端库吗?如果它也是迅速写的,那将是一个好处。 elasticsearch的“客户端”部分显示了多个平台的多个库,但对于iOS没有任何显示,我觉得有人必须这样做吗? 干杯 问题答案: 我怀疑是否有人- 上次我检查时没有,并且有充分的理由。请记住,为了允许IOS客户端(或Android)使用客户端库连接到Elasticsearch,您必须打开集

  • 然后我使用: 这似乎无法为那些设置了该属性的客户机提供一个clusergroup。这对客户端节点不起作用吗?

  • 我正在通过boto3组织从主AWS帐户获取所有子帐户。代码运行良好。我可以得到子帐户列表。但是如果您再次运行我的AWS Lambda函数,那么它将无法获取子帐户。 获取以下错误: 20到30分钟后,我可以看到我的代码工作了一次又一次地引发上述异常。 我是由AWS网关AWS Lambda运行此代码的。 有什么想法吗? 代码:

  • Artemis 1.2.0独立代理conf: 行为:分页工作。 客户端:artemis-jms-client v1.2.0 类:org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory 类:org.apache.activeMQ.ActiveMQConnectionFactory 这是虫子还是我只是煮错了?