RabbitMQ生产者和消费者启动顺序问题。

csdn越来越坑 2016-11-16 03:44:33
我有两个消费者,先将两个消费者启动,再启动生产者发送消息,两个消费者都能收到消息。如果先启动生产者发送100条消息,再一前一后启动两个消费者,为什么只有先启动的消费者能消费呢(消息未消费完)?
生产者代码如下:
public class SenderByFanout {
private static final String EXCHANGE_NAME = "TestFanoutExchange";
private final static String QUEUE_NAME = "testExchangeTpye";
private final static String ROUTING_KEY = "routingKey";
public static void main(String[] argv) throws java.io.IOException,TimeoutException {
Connection con = RabbitMQUtils.getConnection(RabbitMQUtils.getFactory());
Channel channel = RabbitMQUtils.getChannel(con);
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
String message = "注意了:Fanout广播一条消息,注意火灾!";
for(int i = 0 ; i < 100 ; i++){
channel.basicPublish(EXCHANGE_NAME, "", null, (message+String.valueOf(i)).getBytes());
System.out.println(" send message [" + message + "]" + i);
}
channel.close();
con.close();
}
}


消费者代码如下:两个消费者代码相同。
public class RecvByFanout01 {
private static final String EXCHANGE_NAME = "TestFanoutExchange";
private final static String QUEUE_NAME = "testExchangeTpye";
private final static String ROUTING_KEY = "routingKey";
public static void main(String[] argv) throws IOException, TimeoutException, ShutdownSignalException, ConsumerCancelledException, InterruptedException {
ConnectionFactory factory = RabbitMQUtils.getFactory();
Connection connection = RabbitMQUtils.getConnection(factory);
Channel channel = connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
QueueingConsumer consumer = new QueueingConsumer(channel);
boolean autoAck = false;
channel.basicConsume(QUEUE_NAME, autoAck, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
channel.basicAck(delivery.getEnvelope().getDeliveryTag() , false);
Thread.sleep(500);
System.out.println(" received1 message[" + message + "]");
}
}
}
...全文
2870 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,220

社区成员

发帖
与我相关
我的任务
社区描述
企业软件 中间件技术
社区管理员
  • 中间件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧