rabbitmq fanout广播模式无法发给多个消费者,求大神解答
调试了一天了,无法解决rabbitmq的广播模式,两个消费者,一条A消费者接受到,一条B消费者接收到,不能同时接收到,必须是同一个queue,求大神解答,代码如下:
rabbitTemplate 和 cachingConnectionFactory工厂连接类
queue exchange listener 声明类
其中container.setAcknowledgeMode(AcknowledgeMode.NONE);
container.setExposeListenerChannel(true);
container.setMaxConcurrentConsumers(1);
container.setConcurrentConsumers(1);
这几个参数我都调整过,没用,下面是消费者代码
发送代码就一行
通过自带的web管理段发布消息也是一样的效果
下面是管理端的截图
exchange

queue

实在找不到办法了,求解决啊!!!!!!!!!!
rabbitTemplate 和 cachingConnectionFactory工厂连接类
@Configuration
@EnableRabbit
public class RabbitConfiguration {
@Autowired
RabbitProperties properties;
@Bean
public CachingConnectionFactory cachingConnectionFactory(){
CachingConnectionFactory factory = new CachingConnectionFactory();
factory.setAddresses(properties.getAddresses());
factory.setUsername(properties.getUsername());
factory.setPassword(properties.getPassword());
factory.setVirtualHost(properties.getVirtualHost());
factory.setPublisherConfirms(true);
return factory;
}
@Bean
public RabbitAdmin rabbitAdmin() {
return new RabbitAdmin(cachingConnectionFactory());
}
@Bean
public RabbitTemplate rabbitTemplate(CachingConnectionFactory cachingConnectionFactory){
RabbitTemplate template = new RabbitTemplate(cachingConnectionFactory);
template.setMessageConverter(new Jackson2JsonMessageConverter());
return template;
}
}
queue exchange listener 声明类
@Configuration("syncRabbitConfiguration")
@EnableRabbit
public class RabbitConfiguration {
public static final String QUEUE = "external_socket.request";
public static final String EXCHANGE = "external_socket.request";
@Autowired
CachingConnectionFactory cachingConnectionFactory;
@Autowired
RabbitAdmin rabbitAdmin;
@Autowired
SocketConsumer consumer;
@Bean
public FanoutExchange socketExchange(){
return new FanoutExchange(EXCHANGE);
}
@Bean
public Queue socketQueue(){
return new Queue(QUEUE);
}
@Bean
public Binding socketBinding(Queue socketQueue,FanoutExchange socketExchange){
return BindingBuilder.bind(socketQueue).to(socketExchange);
}
@Bean
public SimpleMessageListenerContainer smsContainer(Queue socketQueue){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(cachingConnectionFactory);
container.setAcknowledgeMode(AcknowledgeMode.NONE);
container.setExposeListenerChannel(true);
container.setMaxConcurrentConsumers(1);
container.setConcurrentConsumers(1);
container.setRabbitAdmin(rabbitAdmin);
container.setQueues(socketQueue);
container.setMessageListener(consumer);
container.setRecoveryInterval(MQConstant.Rabbit.DEFAULT_RECOVERY_INTERVAL);
return container;
}
}
其中container.setAcknowledgeMode(AcknowledgeMode.NONE);
container.setExposeListenerChannel(true);
container.setMaxConcurrentConsumers(1);
container.setConcurrentConsumers(1);
这几个参数我都调整过,没用,下面是消费者代码
@Service
public class SocketConsumer implements ChannelAwareMessageListener {
@Override
public void onMessage(Message message, Channel channel) throws Exception {
String body = null;
try {
body = new String(message.getBody(),"UTF-8");
SimpleDataDto dto = JSONObject.parseObject(body, SimpleDataDto.class);
System.out.println(dto.getSyncType()+":收到消息");
if(dto.getSyncType() == null){
List<SocketIOClient> allClient = SessionManager.getAllClient();
for (SocketIOClient socketIOClient : allClient) {
socketIOClient.sendEvent(dto.getDataType(),dto.getData());
}
}else{
SocketIOClient client = SessionManager.getClient(dto.getSyncType());
if(client !=null)
client.sendEvent(dto.getDataType(),dto.getData());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
}发送代码就一行
rabbitTemplate.convertAndSend(RabbitConfiguration.EXCHANGE,"",dataDto);通过自带的web管理段发布消息也是一样的效果
下面是管理端的截图
exchange

queue

实在找不到办法了,求解决啊!!!!!!!!!!
...全文
相关推荐
java面试题_消息中间件--RabbitMQ(22题).pdf
1、上千万条消息在mq中积压了⼏个⼩时还没解决: 2、rabbitmq设置过期时间,部分消息丢失: 3、RabbitMQ 上的⼀个 queue 中存放的 message 是否有数量限制? 4、分布式部署: 5、如何确保消息正确地发送⾄RabbitMQ? 6、如何确保消息接收⽅消费了消息? 7、如何避免消息重复投递或重复消费? 8、消息基于什么传输? 9、消息如何分发? 10、消息怎么路由? 11、如何确保消息不丢失? 12、使⽤RabbitMQ有什么好处? 13、消息队列有什么缺点? 14、MQ如何选型? 15、如何保证消息队列⾼可⽤? 16、如何保证消息的顺序性? 17、使⽤RabbitMQ增加rest服务吞吐量。 18、RabbitMQ交换器有哪些类型? 19、RabbitMQ如何保证数据⼀致性? 20、RabbitMQ消费者⾃动扩展数量 21、RabbitMQ结构: 22、rabbitmq队列与消费者的关系?
牧马人RabbitMQ资料.zip
牧马人rabbitmq资料,
Java 消息中间件MQ面试题
Java 消息中间件MQ面试题
专题04:架构设计面试题(卷王专供+ 史上最全 + 2023面试必备)-V105-from-尼恩Java面试宝典.pdf
专题04:架构设计面试题(卷王专供+ 史上最全 + 2023面试必备)-V105-from-尼恩Java面试宝典.pdf
机械三维3D设计图-等离子清洗机.zip
机械三维3D设计图-等离子清洗机.zip


Java SE
