在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ java rabbitmq 發(fā)送消息是topic模式, 消費者 怎么消費多個不同

java rabbitmq 發(fā)送消息是topic模式, 消費者 怎么消費多個不同名字的隊列?

這里有幾個不同的隊列 名字沒有什么規(guī)則 就是xxx.xxx exchange也是和隊列的名字一樣的

圖片描述

圖片描述

package com.monitor.receiver.queue;

import java.util.List;

import java.util.Map;

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.retry.annotation.Recover;

import org.springframework.stereotype.Component;

import com.monitor.receiver.jpush.PushUtil;

import com.monitor.receiver.pojo.SysWarnInfo;

import com.monitor.receiver.service.SysWarnInfoService;

@Recover

@Component

public class Receive {

    @Autowired

    SysWarnInfoService sysWarnInfoService;   

    @RabbitListener(queues="Adine.One")    

    public void process_sys_warn1(Map msg) {    

        if(msg!=null){

            List< SysWarnInfo>list=sysWarnInfoService.findAccountList(msg);

             PushUtil.jiguangPush(list);

        }

    }

    @RabbitListener(queues="lous.wqui")    

    public void process_sys_warn2(Map msg) {    

        if(msg!=null){

            List< SysWarnInfo>list=sysWarnInfoService.findAccountList(msg);

             PushUtil.jiguangPush(list);

        }

    }

}

向上面的消費者 寫了兩個監(jiān)聽,根據(jù)隊列名 監(jiān)聽指定的隊列。 但是現(xiàn)在隊列是動態(tài)生成的 根本不知道有多少個隊列,也不知道隊列名字 反正隊列名生成規(guī)則就是XXX.XXX(用戶名.xxx類型)。 能不能只寫一個消費去消費此mq服務器所有的隊列? 像那種#.# 怎么配置的 就是消費所有的意思 怎么消費所有?

回答
編輯回答
枕頭人

樓上的回答很贊。但是:
樓上的誤會了樓主的需求。
樓主的需求應該是:
1.隊列是根據(jù)某個字段動態(tài)產(chǎn)生,比如用戶手機號。
2.同時消費兩個或多個,指定手機號的隊列(動態(tài)指定。。。動態(tài)。。。動態(tài),重要的事情說三遍,舉個荔枝:這次指定路由到139.....和136....., 下次指定168....、139.....和136.....)。

這種需求,單獨依靠rabbitmq的exchange的routingKey是不行的。必須要通過接口,分發(fā)消息了

對于一個監(jiān)聽能消費所有消息的需求。。。要么你只建一個隊列。。。要么,單獨建一個隊列,推送到其他隊列的消息,都重復推送到這個隊列。就相當于匯總了所有隊列。

至于這種天馬行空的需求,我是怎么知道的。。。。
我想說,我不僅知道這個,還知道了啥叫私密隊列。對,你沒看錯,私密。
私密,也可以實現(xiàn)。。。服務端分發(fā)嘛。。。。那么,問題來了--我要這mq有何用?

哎,領導,我要離職。。。

2018年6月6日 23:50
編輯回答
心沉

題主先要明白 exchange的概念及其對應的幾種類型和routingKey的概念。
如果不依賴于任何插件的話,我目前的答案是不能。原因如下:
1、rabbit是生產(chǎn)者消費者解耦合的,必須建立綁定關系,隊列才能被消費
2、每條新生隊列默認只有一條綁定關系,那就是發(fā)送到amq.default的exchange中的消息,會按照routingKey名稱自動路由到相同名字的queue
3、你的隊列是動態(tài)生成的,那說明沒有新建綁定關系,只靠默認的綁定關系是做不到這一點的

另外,能不能只寫一個消費去消費此mq服務器所有的隊列? 這個問題是錯誤的,隊列本來就是消費者,沒有消費消費者這一說,題主的意思應該是寫一個服務消費所有的rabbitmq指定exchange的消息, 這個是可以做到的。
建議題主再了解一下rabbit相關知識,歡迎再來提問

2018年8月26日 23:04