这里有几个不同的队列 名字没有什么规则 就是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相关知识,欢迎再来提问