首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用WebSocketMessageBroker和分布式微服务配置spring RabbitMQ

用WebSocketMessageBroker和分布式微服务配置spring RabbitMQ
EN

Stack Overflow用户
提问于 2016-01-13 11:37:16
回答 1查看 868关注 0票数 2

我试图在跨分布式微服务的SpringWebSocketMessageBroker中使用RabbitMq。

我正在处理的设置是

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

代码语言:javascript
复制
@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("."));
   }
}

给定此配置,MyMicroservice应该向哪个交换/队列发布,以便将消息代理到Stomp服务?

我尝试了以下几种(在发布方面--在MyMicroservice中)

代码语言:javascript
复制
@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");
    }
}

但是,该消息似乎没有在WebSocket连接上进行代理。

首先,我的问题是:

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

回答 1

Stack Overflow用户

发布于 2016-01-13 18:03:22

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

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

使用Spring (或者仅仅使用AMQP协议),您应该遵循一些RabbitMQ STOMP适配器规则

主题目的地 对于将每条消息的副本传递给所有活动订阅者的简单主题目的地,可以使用表单/topic/<name>的目的地。主题目的地支持AMQP主题交换的所有路由模式。 发送到没有活动订阅者的主题目的地的消息被简单地丢弃。 AMQP 0-9-1语义 对于SEND帧,该消息被发送到具有路由密钥<name>amq.topic交换。 对于SUBSCRIBE帧,将创建一个自动删除的非持久队列,并将其绑定到具有路由密钥<name>amq.topic交换。对队列创建订阅。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34765696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档