我试图在跨分布式微服务的SpringWebSocketMessageBroker中使用RabbitMq。
我正在处理的设置是

在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("."));
}
}给定此配置,MyMicroservice应该向哪个交换/队列发布,以便将消息代理到Stomp服务?
我尝试了以下几种(在发布方面--在MyMicroservice中)
@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连接上进行代理。
首先,我的问题是:
发布于 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,否则您的邮件将在没有订阅者的情况下丢失。
https://stackoverflow.com/questions/34765696
复制相似问题