[英]Websockets, SockJs, Stomp, Spring, RabbitMQ, delete User specific Queues automatically
[英]Durable queues using Spring Rabbitmq Stomp
我對Spring和RabbitMQ具有以下配置:
春季靴:1.2.7
RabbitMQ:3.5.4
我正在使用以下Spring Bean創建Stomp端點(我的配置類擴展了AbstractWebSocketMessageBrokerConfigurer
):
@Bean
public TopicExchange streamingExchange(@Qualifier("admin") final RabbitAdmin rabbitAdmin) {
TopicExchange topicExchange = new TopicExchange(exchangeName, true, false);
topicExchange.setAdminsThatShouldDeclare(rabbitAdmin);
return topicExchange;
}
@Override
public void configureMessageBroker(final MessageBrokerRegistry config) {
config.enableStompBrokerRelay("/my_stream", "/test").setRelayHost(host)
.setSystemLogin(username).setSystemPasscode(password).setClientLogin(username)
.setClientPasscode(password);
}
@Override
public void registerStompEndpoints(final StompEndpointRegistry registry) {
registry.addEndpoint("/test").setAllowedOrigins("*").withSockJS();
}
現在,當客戶端連接到該端點時,將創建一個臨時隊列,並通過該隊列流式傳輸響應數據。 如果客戶端斷開連接,隊列將被刪除,消息將丟失。
為防止這種情況,我想創建持久隊列(因為這些隊列的持久性設置為false,而自動刪除設置為true),如果不是這樣,我想在這些隊列上設置一些到期時間(例如1小時左右)。 從RabbitMQ 文檔中 ,似乎我們可以在標頭中傳遞這些值,但是,這僅適用於3.6.0及更高版本,因為我們擁有3.5.4,因此這不是一個選擇。
還有其他配置方式嗎? (另一種方法是為連接請求添加某種偵聽器並以編程方式配置隊列參數?我不確定這是否可行,因為我對Spring Rabbitmq stomp插件了解不多)
想知道您是否嘗試過使用Rabbitmqadmin工具將隊列聲明為持久隊列?
rabbitmqadmin declare queue name=your-queue durable=true
可以從這里https://www.rabbitmq.com/management-cli.html下載管理工具
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.