Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Spring Broker中继在内部使用的stomp客户端_Spring_Rabbitmq_Spring Websocket_Stomp - Fatal编程技术网

获取Spring Broker中继在内部使用的stomp客户端

获取Spring Broker中继在内部使用的stomp客户端,spring,rabbitmq,spring-websocket,stomp,Spring,Rabbitmq,Spring Websocket,Stomp,我试图在Spring中设置一个代理中继,RabbitMQ是代理。当所有事件都源于我的浏览器时,事情会按预期进行,但是,有时我会在服务器端动态生成事件。我还想将它们发送到RabbitMQ,以利用持久主题或消息的TTL之类的功能。据我所知,使用SimpleMessageTemplate.convertAndSend()和convertAndSendToUser都会将事件发送到浏览器而不是代理 现在,我正在尝试创建一个新的stomp客户端到rabbitmq,并通过它发送事件。但我忍不住觉得有点不舒服。

我试图在Spring中设置一个代理中继,RabbitMQ是代理。当所有事件都源于我的浏览器时,事情会按预期进行,但是,有时我会在服务器端动态生成事件。我还想将它们发送到RabbitMQ,以利用持久主题或消息的TTL之类的功能。据我所知,使用
SimpleMessageTemplate.convertAndSend()
convertAndSendToUser
都会将事件发送到浏览器而不是代理

现在,我正在尝试创建一个新的stomp客户端到rabbitmq,并通过它发送事件。但我忍不住觉得有点不舒服。有没有一种方法可以控制Spring使用的stomp客户端并轻松转发我的消息?还是我在这里遗漏了什么


感谢您的帮助,谢谢

花了一段时间,但结果证明您不需要获得内部stomp客户端(实际上是Reactor Netty提供的内部TCP客户端)或类似的东西。以下是需要进行一点定制时需要执行的步骤:

  • Spring使用
    @EnableWebSocketMessageBroker
    来配置代理,或者您可以扩展
    DelegatingWebSocketMessageBrokerConfiguration
    。我最终扩展了它,但没什么区别
  • configureMessageBroker(MessageBrokerRegistry registry)
    中,使用注册表并启用stomp中继和重要部分:对于使用相同方法的注册表,添加
    ChannelInterceptors
    。您可以获取stomp命令并根据需要对其进行处理。这个想法与Spring Intercetpors完全相同。在其中添加所需的标题

    最终StompHeaderAccessor headerAccessor=StompHeaderAccessor.wrap(消息); StompCommand=headerAccessor.getCommand()

最后,重新创建要发送的消息

MessageBuilder.createMessage(new byte[0], accessor.getMessageHeaders());
最后,您可以测试东西是否真的进入RabbitMQ管理控制台,以观察消息是否真的在发送