Java 使用RabbitMQ和分布式微服务配置SpringWebSocketMessageBroker
我正在尝试将RabbitMq与springJava 使用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
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代理之间的关系是什么
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");
}
}