博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ActiveMQ几个注意点
阅读量:5904 次
发布时间:2019-06-19

本文共 1342 字,大约阅读时间需要 4 分钟。

  hot3.png

最近在做呼叫中心的时候,其中回调事件需要发送消息队列,经过选型用了ActiveMQ,虽然比较熟悉的还是Kafka,但总有第一次嘛,所以把碰到的一些注意点罗列一下,避免后人再踩。

集群模式说明

ActiveMQ集群其实是Master-Slave模式,跟Kafka不一样,ActiveMQ只有master节点提供服务,如果master节点宕机,那么slave节点会转为master节点;

队列使用

ActiveMQ分两种消息机制:Queue和Topic;

  • Queue:队列形式,一个消息只能被消费一次,如果由多个业务方都要消费该队列,这种形式是不支持的;
    • 优点:
      • 简单
      • 支持业务端多节点消费
    • 缺点:
      • 仅能提供一个业务进行消费,不适合多业务消费场景
  • Topic:topic形式,Kafka就是这种模式,
    • 优点:
      • 支持可以多业务方进行消费
    • 缺点:
      • 但如果一个业务想保证消费的幂等性,那么需要设置ClentId属性,但设置了ClientId以后只能一个实例进行消费

因此使用的过程中,这两种模式都有一定的缺陷。

那么ActvieMQ其实还有一种模式:虚拟Topic(VirtualTopic),这种结构是这样的:对于生产端来说是个Topic,但对于消费端来说其实是个Queue。

虚拟Topic只要按照约定命名即可,以“VirtualTopic.”开头,消费的时候“Consumer.xxx.VirtualTopic.”开头,xxx对于不同的业务可以定义不同的值,如下图所示

生产队列

消费队列

这样消费端就可以多消费者消费了,各业务又互不影响。

failover策略

由于开始运维经验不足,导致ActiveMQ集群宕机了几次,也暴露了问题,就是默认情况下,在宕机情况下,生产端无法发消息会导致该线程一直等待,那么结果显而易见,消息挤压一多,直接导致服务不可用,不再接收新请求。

解决方案显而易见,就是增加超时机制,连接串如下:

failover://(tcp://192.168.5.1:61616,tcp://192.168.5.2:61616,tcp://192.168.5.3:61616)?nested.wireFormat.maxInactivityDuration=2000&nested.connectionTimeout=2000&maxReconnectAttempts=2&timeout=3000&initialReconnectDelay=10&startupMaxReconnectAttempts=2&maxReconnectDelay=1000
  • nested.wireFormat.maxInactivityDuration:最大检测不活跃时间,2000毫秒
  • nested.connectionTimeout:连接超时事件,2000毫秒
  • maxReconnectAttempts:重连次数
  • timeout:超时时间
  • initialReconnectDelay:首次尝试延时
  • startupMaxReconnectAttempts:最大重试次数
  • maxReconnectDelay:最大重连间隔

转载于:https://my.oschina.net/tree/blog/2088033

你可能感兴趣的文章
template.helper 多参数
查看>>
Android 四大组件之一(Activity)
查看>>
扫描(一)
查看>>
PIE SDK矢量数据的读取
查看>>
Centos7安装rabbitmq server 3.6.0
查看>>
iostat命令学习
查看>>
SQL 三种分页方式
查看>>
查看linux是ubuntu还是centos
查看>>
html video的url更新,自动清缓存
查看>>
IOS Xib使用——为控制器添加Xib文件
查看>>
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤
查看>>
【11】ajax请求后台接口数据与返回值处理js写法
查看>>
Python菜鸟之路:Jquery Ajax的使用
查看>>
LeetCode算法题-Maximum Depth of Binary Tree
查看>>
Cox 教学视频5
查看>>
Jenkins持续集成学习-搭建jenkins问题汇总
查看>>
使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)
查看>>
flink watermark介绍
查看>>
[Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍
查看>>
Android Xutils 框架
查看>>