Rabbitmq无法监听后续消息
现象:
消息队列在处理完一条消息后,无法继续监听后续消息。
首先,系统启动时要启动接收方法如下:
protected void Application_Start()
{
RouteTable.Routes.MapHubs();
AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Register(GlobalConfiguration.Configuration);
//GlobalHost.ConnectionManager.GetHubContext<ProcessMonitoring>().Clients.All.receive("ss");
//RouteTable.Routes.MapHubs();
ReceiveSuccessMessage();
}
其次,接收方法如下,
/// <summary>
/// 反馈成功的消息队列
/// </summary>
public static void ReceiveSuccessMessage()
{
ConnectionFactory factory = CreateConnectionFactory();
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
//输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
channel.BasicQos(, , false);
var consumer = new EventingBasicConsumer(channel);
channel.BasicConsume(receiveQueueSuccess, false, consumer);
consumer.Received += (model, ea) =>
{
try
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body); //反馈信息处理
ProcessFeedbackInfoForQueue(message);
channel.BasicAck(ea.DeliveryTag, false);
}
catch (Exception ex)
{
Yingu.Common.SysLog.Write("接受消息队列失败:", string.Format("反馈成功消息队列 时间:{0} :失败原因{1}", DateTime.Now, ex.Message + ex.StackTrace));
channel.BasicAck(ea.DeliveryTag, false);
}
}; }; };
}
解决方法:
将第二个方法改为
/// <summary>
/// 反馈成功的消息队列
/// </summary>
public static void ReceiveSuccessMessage()
{
ConnectionFactory factory = CreateConnectionFactory();
var connection = factory.CreateConnection();
var channel = connection.CreateModel();
//输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
channel.BasicQos(, , false);
var consumer = new EventingBasicConsumer(channel);
channel.BasicConsume(receiveQueueSuccess,false,consumer);
consumer.Received += (model, ea) =>
{
try
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body); //反馈信息处理
ProcessFeedbackInfoForQueue(message);
channel.BasicAck(ea.DeliveryTag, false);
}
catch (Exception ex)
{
Yingu.Common.SysLog.Write("接受消息队列失败:", string.Format("反馈成功消息队列 时间:{0} :失败原因{1}", DateTime.Now, ex.Message + ex.StackTrace));
channel.BasicAck(ea.DeliveryTag, false);
}
};
}
原因是每次处理一条消息后,接收方法会断开连接,无法继续监听后续消息。
Rabbitmq无法监听后续消息的更多相关文章
- mqtt实现自动监听服务器消息
本示例借助meteor的一个环境跑,和我们平时用的node自己搭的环境或java,php的环境本质一样,在此不多讨论. 首先需求是:多系统对接进行消息实时传递. 安装好mqtt: npm insta ...
- 【转】]监听SMS消息/编程实现短信拦截
当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent.注意,这个动作是一个字符串值,SDK 1.0不再包 ...
- Canal 实战 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存
一. Canal 简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同 ...
- select监听udp消息
服务端 #!/usr/bin/python2.6 # -*- coding:utf-8 -*- import json import socket import select def socketse ...
- RabbitMQ 将监听的IP从localhost修改为指定IP
# vim /etc/rabbitmq/rabbitmq.config 搜索 tcp_listeners 更改为:{tcp_listeners, [{"指定的IP", 5672}] ...
- spring-boot rabbitMq 完整项目搭建,包括创建、发送、监听
写在开始 rabbitMq 代码按照三部分介绍 第一部分 交换机和队列的创建 第二部分 消息发送 第三部分 消息监听 第一部分 1 建立queue 2 建立exchange 3 exchange绑定q ...
- Spring整合ActiveMQ及多个Queue消息监听的配置
消息队列(MQ)越来越火,在java开发的项目也属于比较常见的技术,MQ的相关使用也成java开发人员必备的技能.笔者公司采用的MQ是ActiveMQ,且消息都是用的点对点的模式.本文记录了实 ...
- Yii2.0 安装yii2-queue并在Linux启动守护进程监听消息
一.什么是yii2-queue? Yii2-queue是Yii2.0 PHP框架下一个消息队列拓展插件,支持基于DB, Redis, RabbitMQ, AMQP, Beanstalk 和 Gearm ...
- 使用jedis实现Redis消息队列(MQ)的发布(publish)和消息监听(subscribe)
前言: 本文基于jedis 2.9.0.jar.commons-pool2-2.4.2.jar以及json-20160810.jar 其中jedis连接池需要依赖commons-pool2包,json ...
随机推荐
- JS基础知识——定时器
1.定时器——setInterval("执行函数名",间隔时间); setInterval(fun,1000);每隔1秒钟执行一次fun函数 setInterval("f ...
- Ibatis collect select用法详解
问题:之前接触过Ibatis的使用,在做一对多的时候,一般都是手动去填充,非自动让ibatis去填充数据. 下面就用ibatis的自动填充功能来实现. 关键使用到collection 标签下的sele ...
- ibatis一对多 数据库设计及实现
iBatis的多表关联. ibatis的表关联,和数据库语句无关,是在Java程序中,把若干语句的结果关联到一起.这种关联形式,虽然在大数据量时是很奢侈的行为,但是看起来很干净,用起来也很方便. 这里 ...
- 用Quick Cocos2dx做一个连连看(一)
呵呵,不知道能不能坚持下来,先写着吧. 预备知识:Quick Cocos2dx 2.2.5基本知识 或者 Cocos2dx基本知识, lua入门 开发工具:Sublime Text 2.0/3.0 原 ...
- android测试之——Instrumentation(一)
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址 ...
- HDU 2809 God of War
状压DP.我认为是数据水了,用打死了哪几只作为状态,AC代码只需要保存当前状态的最大血量,完全没有考虑攻击力大小. 个人认为正确DP应该这样的:dp[状态][等级],但这样写不能AC,时间复杂度会很大 ...
- css01
1. 常用属性:①color:文本颜色:②background-color:背景颜色:③font-size:文字大小: 2. 样式声明:①内部样式:style=“样式规则:”,写于作用标签内, ...
- (中等) UESTC 94 Bracket Sequence,线段树+括号。
There is a sequence of brackets, which supports two kinds of operations. we can choose a interval [l ...
- MySQL导入sql脚本中文乱码设置和常用命令
1. use database_name; 2. set names utf8; (或其他需要的编码) 3. source example.sql (sql文件存放路径) Mysql安装目录数据库目录 ...
- ajax 基础2
连接数据库实现分页功能 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defa ...