2016-01-13 63 views
2

我試圖在分佈式微服務中使用Spring WebSocketMessageBroker的RabbitMq。使用RabbitMQ和分佈式微服務配置Spring WebSocketMessageBroker

我工作的設置是

enter image description here

內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連接。

需要明確的是,我的問題是:是否支持

  • 這種類型的分佈式的配置外的開箱?
  • 考慮到配置示例,服務可以發佈到的RabbitMq主題和Stomp messagebroker代理之間的關係是什麼?

回答

2

您的解釋並不清楚您爲什麼要使用Spring AMQP進行STOMP交互,儘管可能無論如何。

如果您打算直接從Java發送STOMP消息到目標目標,我建議看一下Spring Messaging中的StompClient支持。

使用Spring AMQP(或只是AMQP協議),你應該遵循一些RabbitMQ的STOMP適配器rules

主題目的地

對於簡單的主題目的地,其提供每封郵件的副本到所有活躍用戶,可以使用/topic/<name>形式的目的地。主題目標支持AMQP主題交換的所有路由模式。

發送到沒有活動用戶的主題目標的郵件將被丟棄。

AMQP 0-9-1語義

對於SEND幀,該消息被髮送到與所述路由密鑰<name>amq.topic交換。

對於SUBSCRIBE幀,將創建一個自動刪除的非持久隊列並將其綁定到與路由鍵<name>交換的amq.topic。訂閱是根據隊列創建的。

請注意,您應該首先有subscription,否則您的郵件將在沒有訂閱者的情況下丟失。