java rabbitmq 发送消息是topic模式, 消费者 怎么消费多个不同名字的队列?

这里有几个不同的队列 名字没有什么规则 就是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);

}

}

}

向上面的消费者 写了两个监听,根据队列名 监听指定的队列。 但是现在队列是动态生成的 根本不知道有多少个队列,也不知道队列名字 反正队列名生成规则就是XXX.XXX(用户名.xxx类型)。 能不能只写一个消费去消费此mq服务器所有的队列? 像那种#.# 怎么配置的 就是消费所有的意思 怎么消费所有?

回答:

题主先要明白 exchange的概念及其对应的几种类型和routingKey的概念。
如果不依赖于任何插件的话,我目前的答案是不能。原因如下:
1、rabbit是生产者消费者解耦合的,必须建立绑定关系,队列才能被消费
2、每条新生队列默认只有一条绑定关系,那就是发送到amq.default的exchange中的消息,会按照routingKey名称自动路由到相同名字的queue
3、你的队列是动态生成的,那说明没有新建绑定关系,只靠默认的绑定关系是做不到这一点的

另外,能不能只写一个消费去消费此mq服务器所有的队列? 这个问题是错误的,队列本来就是消费者,没有消费消费者这一说,题主的意思应该是写一个服务消费所有的rabbitmq指定exchange的消息, 这个是可以做到的。
建议题主再了解一下rabbit相关知识,欢迎再来提问

回答:

楼上的回答很赞。但是:
楼上的误会了楼主的需求。
楼主的需求应该是:
1.队列是根据某个字段动态产生,比如用户手机号。
2.同时消费两个或多个,指定手机号的队列(动态指定。。。动态。。。动态,重要的事情说三遍,举个荔枝:这次指定路由到139.....和136....., 下次指定168....、139.....和136.....)。

这种需求,单独依靠rabbitmq的exchange的routingKey是不行的。必须要通过接口,分发消息了

对于一个监听能消费所有消息的需求。。。要么你只建一个队列。。。要么,单独建一个队列,推送到其他队列的消息,都重复推送到这个队列。就相当于汇总了所有队列。

至于这种天马行空的需求,我是怎么知道的。。。。
我想说,我不仅知道这个,还知道了啥叫私密队列。对,你没看错,私密。
私密,也可以实现。。。服务端分发嘛。。。。那么,问题来了--我要这mq有何用?

哎,领导,我要离职。。。

以上是 java rabbitmq 发送消息是topic模式, 消费者 怎么消费多个不同名字的队列? 的全部内容, 来源链接: utcz.com/p/181016.html

回到顶部