消息队列客户端转发MQClinet2.6版


       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的配置
<? xml   version =   "1.0"   encoding   = "UTF-8" ?>
< mqclient >      
    < manage >
       < port >  8888 </  port >
       < username >  root </  username >
       < password >  123456 </  password >
       < max_guest >  5 </  max_guest >
    </ manage >       
    < error_mail  desc =  "错误报警邮件"  >
       < title >  消息队列错误报告  </ title >
       < recipients_mail  desc =  "收件地址,多个以,分隔"  ></ recipients_mail >
       < send_addr >  service@91160.cn  </ send_addr >
       < send_username >  service </  send_username >
       < send_password >  12345a </  send_password >
       < send_host >  mail.91160.cn  </ send_host >
       < send_port >  25 </  send_port >
    </ error_mail >
    < hosts >
      < host  ip =  "192.168.1.28"  port  = "5672"  vhost = "/"  username =  "guest"  password = "guest"  >
         < queue >
             < name >  queue2 </  name >
             < desc >  短信发送队列 </ desc  >
             < max_thread_num >  3 </  max_thread_num >
             < auto_ask  desc =  "是否自动应答:0 自动应答,1 显示应答"  > 0  </ auto_ask >
             < work  type =  "http"  desc  = "回调,command 、http两种"  httptimeout = "100"  > http://ny.rabbit.com/MQTest/get.php?r=g  </ work >
             < max_requeue  desc =  "最大重入队列次数,即失败重处理次数"  > 2  </ max_requeue >
             < send_fail_mail  desc =  "消息处理错误是否触发邮件:0不触发,1 触发"  > 1  </ send_fail_mail >
             < fail_exchange  desc =  "处理失败的消除传发交换器名"  > SMSFailed  </ fail_exchange >
        </queue>
      </host>
    </hosts>        
</ mqclient >
(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   虚拟机
       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的设置
  1. log4j.rootCategory=INFO, R
  2.    
  3. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
  4. #将日志保存文件名,将每天产生一个文件
  5. log4j.appender.R.File=D:\\java\\logs\\qc.log
  6. log4j.appender.R.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.R.layout.ConversionPattern=[MQ] [%d{yyyy-MM-dd HH:mm:ss,SSS}] [%p][%l] %m%n
复制代码

详情可参考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
(10)重新导入配置
refresh

4、关于错误邮件的几点说明
     该系统中增加了错误邮件报警,错误邮件分系统异常及消息处理失败两种,这两种处理机制上存在一些差异性。
    系统异常指的是连接数据库出错、连接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异常关闭后,订阅线程将会开启一个新的订阅线程,原订阅自动结束,未处理完的消息释放到队列;
(4)当MQ连接异常关闭后,队列线程将会重新连接MQ,并结束原订阅,重新开启订阅 ,未处理完的消息释放到队列;
(5)对于消息处理时,当失败之后,首先会检查是否需要重入队列,待重新处理;否则,检查是否有需要转发到失败交换器;
(5)消息处理,多次重入队列均失败之后,若配置需要发送邮件,将发送报警邮件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值