MQClient用于与RabbitMQ的一个消息客户端转发程序,他负责监听RabbitMQ中的队列,并即时获取队列消息,按照配置进行转发消息。对消息处理结果监控,提供失败多次重试、失败邮件、转发失败队列等功能。
1、功能说明
- 自动发送错误邮件功能
- 可配置错误处理交换机功能,使出错的消息可进入相关队列处理
- 使用log4j模块,支持日志配置化
- 当连接失败或出错后,支持再次尝试
- 增加MQClient命令管理功能,在不kill进程的前提下可用命令完成服务的重载、任务的关闭和开启
- 消息处理支持http和命令行两种模式
2、文件列表及说明
- MQClient.jar MQClient主体文件
- log4j.properties log4j日志配置文件
- mqclient.xml MQClient基础配置文件
- mysql-connector-java-5.1.22-bin.jar mysql数据库驱动组件
- rabbitmq-client.jar RabbitMQ驱动组件
- dom4j-1.6.1.jar xml组件
- log4j-1.2.17.jar log4j日志组件包
3、使用说明
3.1、mqclient.xml的配置 (1) manage 管理设置
port 管理访问端口
username 管理员用户名
password 管理员密码
max_guest 管理员最大在线数
(2)error_mail 错误报警邮件设置
title 邮件显示标题
recipients_mail 接收错误报警邮件的地址,多个地址以英文逗号分隔
send_addr 发送邮件地址
send_username 发送邮件的用户名
send_password 发送邮件的密码
send_host smtp服务器
send_port smtp服务端口
(3)hosts 消息队列虚拟机设置
a. host 虚拟机
a. host 虚拟机
ip
port
vhost
username
password
b.quque 队列
name
desc
max_thread_num
auto_ask
work
max_requeue
最大重入队列次数,即失败重处理次数
send_fail_mail 是否发送失败邮件:当消息重入队列均处理失败后发送,收件人为error_mail中设置
fail_exchange
失败消息交换器名:
当消息重入队列均处理失败后,消息将自动转发给该
交换器处理
3.2、 log4j.properties的设置
详情可参考log4j的配置
3.3、
管理命令
该版本支持以命令的形式对MQClient简单管理,使时以telnet连接服务,ip为MQClient所在服务器IP,端口即为mqclient.xml文件中mange结点所设置,具体命令如下所示:
(1)连接MQClient
telnet <MQClinet服务器IP> <端口>
(2)权限验证
login <用户名> <密码>
(3)关闭一个任务
stop <任务ID>
(4)关闭所有任务
stop
(5)开启一个任务
start <任务ID>
(6)开启所有任务
start
(7)重启一个任务
reload <任务ID>
(8)重启所有任务
reload
(9)列出所有队列
list
list
(10)重新导入配置
refresh
该系统中增加了错误邮件报警,错误邮件分系统异常及消息处理失败两种,这两种处理机制上存在一些差异性。
系统异常指的是连接数据库出错、连接RabbitMQ或取消息出错、http请求无响应等,该类错误均为触发邮件。
对于消息处理失败,即请求的http有返回值,但内容并不是约定好的1。在这种情况下,如果在数据库mq_task对该任务fail_send_mail字段设置为1时才下发错误邮件,否则均不发送。
此下,值得一提的是log4j日志模块本身也是带有日志邮件发送功能的,也可以定义日志级别发送。但在该版本中不建议使用,后期我们可以考虑将两者有机结合。
5、升级步骤
先将MQClient2.0.zip解压,并停止MQClient_1_X服务,然后按照如下顺序操作
(1) mqclient.xml文件升级
参照原mqclient.xml中数库设置,配置新的mqclient.xml文件并替换原mqclient.xml
(2)设置log4j.properties
(3)更新文件log4j-1.2.17.jar、MQClient-2-0.jar
5、实现原理
(1)主线程读取配置,配置一次读取之后将会缓存在内存中,不再主动更新;
(2)主线程会为每个队列开启一个独立的线程,每个队列共用一个MQ连接,根据配置的设置,每个队列将开启多个消息订阅线程,每个订阅线程使用一个channel.
(3)当channel异常关闭后,订阅线程将会开启一个新的订阅线程,原订阅自动结束,未处理完的消息释放到队列;
(2)主线程会为每个队列开启一个独立的线程,每个队列共用一个MQ连接,根据配置的设置,每个队列将开启多个消息订阅线程,每个订阅线程使用一个channel.
(3)当channel异常关闭后,订阅线程将会开启一个新的订阅线程,原订阅自动结束,未处理完的消息释放到队列;
(4)当MQ连接异常关闭后,队列线程将会重新连接MQ,并结束原订阅,重新开启订阅
,未处理完的消息释放到队列;
(5)对于消息处理时,当失败之后,首先会检查是否需要重入队列,待重新处理;否则,检查是否有需要转发到失败交换器;
(5)消息处理,多次重入队列均失败之后,若配置需要发送邮件,将发送报警邮件.