Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
Java 使用RabbitMQ和分布式微服务配置SpringWebSocketMessageBroker_Java_Spring_Spring Integration_Spring Websocket - Fatal编程技术网

Java 使用RabbitMQ和分布式微服务配置SpringWebSocketMessageBroker

Java 使用RabbitMQ和分布式微服务配置SpringWebSocketMessageBroker,java,spring,spring-integration,spring-websocket,Java,Spring,Spring Integration,Spring Websocket,我正在尝试将RabbitMq与springWebSocketMessageBroker一起跨分布式微服务使用 我正在使用的设置是 在WebSocketMessageBroker中,我使用以下配置,取自文档: @Configuration @EnableWebSocketMessageBroker public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override pub

我正在尝试将RabbitMq与spring
WebSocketMessageBroker
一起跨分布式微服务使用

我正在使用的设置是

在WebSocketMessageBroker中,我使用以下配置,取自文档:

@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

   @Override
   public void registerStompEndpoints(StompEndpointRegistry registry) {
      registry.addEndpoint("/push").setAllowedOrigins("*").withSockJS();
   }

   @Override
   public void configureMessageBroker(MessageBrokerRegistry registry) {
      registry.enableStompBrokerRelay("/queue/", "/topic/", "/app");
      registry.setApplicationDestinationPrefixes("/app");
      registry.setPathMatcher(new AntPathMatcher("."));
   }
}
给定此配置,为了将消息代理到Stomp服务,应该将
MyMicroservice
发布到哪个exchange/queue

我尝试了以下方法(在发布端——在MyMicroservice中)

但是,该消息似乎没有通过WebSocket连接进行代理

明确地说,我的问题是:

  • 这种类型的分布式配置是否支持开箱即用
  • 给定示例配置,服务可以发布到的RabbitMq主题与Stomp messagebroker代理之间的关系是什么

您的解释不清楚为什么要使用Spring AMQP进行STOMP交互,尽管这是可能的

如果要直接从Java向目标目的地发送STOMP消息,我建议查看中的
StompClient
支持

使用Spring AMQP(或者只是AMQP协议),您应该遵循一些RabbitMQ STOMP适配器:

主题目的地

对于向所有活动订阅者发送每条消息副本的简单主题目的地,可以使用
/topic/
格式的目的地。主题目的地支持AMQP主题交换的所有路由模式

发送到没有活动订阅者的主题目标的消息将被丢弃

AMQP 0-9-1语义

对于
SEND
帧,消息将通过路由键
发送到
amq.topic
交换

对于
SUBSCRIBE
帧,将创建一个自动删除的非持久队列,并使用路由键
将其绑定到
amq.topic
交换。根据队列创建订阅

请注意,无论如何,您应该先订阅
,否则您的邮件将在没有订阅者的情况下丢失

@Configuration
@SpringBootApplication
@EnableRabbit
public class Config {
    public static final String WEB_QUEUE = "/topic/myNotificationTopic";
    public static final String WEB_EXCHANGE = "web.exchange";

    @Bean
    Queue webQueue() {
        return new Queue(WEB_QUEUE, false);
    }

    @Bean
    TopicExchange webExchange() {
        return new TopicExchange(WEB_EXCHANGE);
    }

    @Bean
    Binding binding(Queue webQueue, TopicExchange webExchange) {
        return BindingBuilder.bind(webQueue).to(webExchange).with(WEB_QUEUE);
    }

}

@Component
public class ExamplePublisher {

    @Autowired
    private AmqpTemplate amqpTemplate;

    public void sendMessage() {
        amqpTemplate.convertAndSend(Config.WEB_QUEUE, "Hello, world");
    }
}