while (falg)
{
debuglogger.info("find msg of: " + acid);
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String text = new String(delivery.getBody());
// 解析消息
String from = "";
String to = "";
。。。。。。。。
}
当我试着去关闭 channel 通道的时候。。报以下错误:
com.rabbitmq.client.ShutdownSignalException: clean channel shutdown; reason: #method<channel.close>(reply-code=200, reply-text=OK, class-id=0, method-id=0)
at com.rabbitmq.client.QueueingConsumer.handle(QueueingConsumer.java:198)
at com.rabbitmq.client.QueueingConsumer.nextDelivery(QueueingConsumer.java:214)
at com.handbb.dating.mq.MQMsgMrg.recmsg(MQMsgMrg.java:251)
at com.handbb.dating.action.UserAction$1.run(UserAction.java:156)
Caused by: com.rabbitmq.client.ShutdownSignalException: clean channel shutdown; reason: #method<channel.close>(reply-code=200, reply-text=OK, class-id=0, method-id=0)
at com.rabbitmq.client.impl.ChannelN.close(ChannelN.java:521)
at com.rabbitmq.client.impl.ChannelN.close(ChannelN.java:480)
at com.rabbitmq.client.impl.ChannelN.close(ChannelN.java:473)
at com.handbb.dating.mq.MQMsgMrg.closeMq(MQMsgMrg.java:519)
at com.handbb.dating.action.UserAction.userlogout(UserAction.java:194)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
原因可能能为我还在不停的从队列中去接受消息,现在去关闭channel的时候。发生异常。。
现在问题是。我要怎么去合理的关闭channel,不会发生异常,或者理解为。怎么样去更好的接受消息??
求好心人指点。。谢谢。。。
分享到:
相关推荐
c# RabbitMQ封装类,连接发送接收解析都支持
通常,如果无需长期保留队列,建议设置`autoDelete`为`true`,这样当最后一个消费者断开连接后,队列会自动删除。同时,`durable`属性用于指定队列是否应持久化,若非必要,不推荐使用,因为它会增加磁盘使用和恢复...
这个库提供了与RabbitMQ服务器交互的接口,包括连接、断开连接、声明交换器、队列、绑定等操作。封装这个库通常涉及以下步骤: 1. **建立连接**:使用`rabbitmq_c`库中的`amqp_new_connection`函数创建一个新的连接...
在实际开发中,你可能还需要考虑错误处理、连接断开后的重连机制、以及更复杂的频道订阅和消息处理策略。通过这种方式,Vue应用可以实时响应RabbitMQ消息队列中的事件,提高系统的实时性和可扩展性。
2. **连接恢复**:当连接断开时,可以实现自动重连功能,确保服务的连续性。 最后,`RabbitMQ_demo.zip`是一个Android应用示例,展示了如何在Android环境中使用封装好的RabbitMQ工具类。在Android中使用RabbitMQ...
6. **错误处理与断线重连**:确保在WebSocket连接断开时有适当的恢复机制,如重试连接或通知用户。 在实际开发中,还需要考虑安全性、性能优化、错误处理等细节。例如,使用HTTPS保证WebSocket连接的安全,限制并发...
6. 在完成消息处理后,记得断开连接并清理资源。 通过这个封装,你可以更高效地利用RabbitMQ,减少直接与AMQP协议打交道的复杂性,提高开发效率。但请注意,使用过程中还需要关注RabbitMQ的配置、权限控制、消息...
1. 如果消费者接收到消息,在确认之前断开了连接或取消订阅,RabbitMQ 会认为消息没有被分发,然后重新分发给下一个订阅的消费者。 2. 如果消费者接收到消息却没有确认消息,连接也未断开,则 RabbitMQ 认为该消费者...
1. 连接和断开RabbitMQ服务器。 2. 创建、删除交换机和队列。 3. 发布和消费消息。 4. 配置各种类型的交换机(如Direct、Fanout、Topic、Header)。 5. 设置消息持久化,确保在服务器重启后仍能恢复消息。 6. 处理...