当系统业务量不是太大(未到百万千万过亿时),使用消息中间件ActiveMQ也可以,就简要记录下以前某治安监控系统用的ActiveMQ(可能当时版本有点老)。
1. 什么是中间件
在介绍ActiveMQ之前,简介介绍下什么是中间件。
中间件是介于操作系统和在其上运行的应用程序之间的软件。中间件实质上充当隐藏转换层,实现了分布式应用程序的通信和数据管理。它有时被称为管道,因为它将两个应用程序连接在一起,使数据和数据库可在“管道”间轻松传递。 通过中间件,用户可执行很多请求,例如在 Web 浏览器上提交表单,或者允许 Web 服务器基于用户的配置文件返回动态网页。
常见的中间件示例包括数据库中间件、应用程序服务器中间件、面向消息的中间件、Web 中间件和事务处理监视器。每个程序通常都会提供消息传递服务,让不同的应用程序可使用简单对象访问协议 (SOAP)、Web 服务、表述性状态转移 (REST) 和 JavaScript 对象表示法 (JSON) 等消息传递框架进行通信。虽然所有中间件都执行通信功能,但公司选用的类型将取决于要使用的服务以及需要传达的信息类型。这可包括安全身份认证、事务管理、消息队列、应用程序服务器、Web 服务器和目录。中间件还可用于实时发生的操作的分布式处理,而不是来回发送数据。
2. 常用中间件分类
2.1 数据库中间件
MyCat、ShardingSphere
2.2 缓存中间件
Redis、Memcached
2.3 消息队列中间件
消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。
目前开源的消息中间件可谓是琳琅满目,能让大家耳熟能详的就有很多,比如 ActiveMQ(本文要说的)、RabbitMQ、Kafka、RocketMQ、ZeroMQ。
ActiveMQ 是 Apache 出品的、采用 Java 语言编写的完全基于 JMS1.1 规范的面向消息的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。
RabbitMQ 是采用 Erlang 语言实现的 AMQP 协议的消息中间件,最初起源于金融系统,用于在分布式系统中存储转发消息。RabbitMQ 发展到今天,被越来越多的人认可,这和它在可靠性、可用性、扩展性、功能丰富等方面的卓越表现是分不开的。
Kafka 起初是由 LinkedIn 公司采用 Scala 语言开发的一个分布式、多分区、多副本且基于 zookeeper 协调的分布式消息系统,现已捐献给 Apache 基金会。它是一种高吞吐量的分布式发布订阅消息系统,以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如 Cloudera、Apache Storm、Spark、Flink 等都支持与 Kafka 集成。
RocketMQ 是阿里开源的消息中间件,目前已经捐献个 Apache 基金会,它是由 Java 语言开发的,具备高吞吐量、高可用性、适合大规模分布式系统应用等特点,经历过双 11 的洗礼,实力不容小觑。
ZeroMQ 号称史上最快的消息队列,基于 C 语言开发。ZeroMQ 是一个消息处理队列库,可在多线程、多内核和主机之间弹性伸缩,虽然大多数时候我们习惯将其归入消息队列家族之中,但是其和前面的几款有着本质的区别,ZeroMQ 本身就不是一个消息队列服务器,更像是一组底层网络通讯库,对原有的 Socket API 上加上一层封装而已。
2.4 应用服务器中间件
tomcat、jboss、weblogic
2.5 web中间件
apache、nginx
2.6 事务中间件
Seata
暂且举这么多,没有流行下来的就不管了!!!
3. 消息中间件ActiveMQ
3.1 背景介绍
3.1.1 java消息服务:
不同系统之间的信息交换,是我们开发中比较常见的场景,比如系统A要把数据发送给系统B,这个问题我们应该如何去处理? 1999年,原来的SUN公司领衔提出了一种面向消息的中间件服务--JMS规范(标准);常用的几种信息交互技术(httpClient、hessian、dubbo、jms、webservice 五种).
3.1.2JMS概述:
JMS即Java消息服务(Java Message Service的简称),是Java EE 的标准/规范之一。这种规范(标准)指出:消息的发送应该是异步的、非阻塞的。也就是说消息的发送者发送完消息后就直接返回了,不需要等待接收者返回后才能返回,发送者和接收者可以说是互不影响。所以这种规范(标准)能够减轻或消除系统瓶颈,实现系统之间去除耦合,提高系统的整体可伸缩性和灵活性。JMS只是Java EE中定义的一组标准API,它自身并不是一个消息服务系统,它是消息传送服务的一个抽象,也就是说它定义了消息传送的接口而并没有具体实现。
3.1.3 ActiveMQ概述:
我们知道JMS只是消息服务的一组规范和接口,并没有具体的实现,而ActiveMQ就是JMS规范的具体实现;它是Apache下的一个项目,采用Java语言开发;是一款非常流行的开源消息服务器.
3.1.4 ActiveMQ与JMS关系:
我们知道,JMS只是定义了一组有关消息传送的规范和标准,并没有真正实现,也就说JMS只是定义了一组接口而已;就像JDBC抽象了关系数据库访问、JPA抽象了对象与关系数据库映射、JNDI抽象了命名目录服务访问一样,JMS具体的实现由不同的消息中间件厂商提供,比如Apache ActiveMQ就是JMS规范的具体实现,Apache ActiveMQ才是一个消息服务系统,而JMS不是。
3.2 ActiveMQ的使用
3.2.1 安装ActiveMq
前提已安装好jdk1.8https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html(自行百度),然后去官方http://archive.apache.org/dist/activemq/或http://activemq.apache.org/components/classic/download/下载activemq安装包,选择稳定版本
也可以通过命令行下载:
wget http://archive.apache.org/dist/activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz
然后解压缩
tar zxf apache-activemq-5.15.9-bin.tar.gz
cd apache-activemq-5.15.9
创建服务用户:
useradd activemq
chown -R activemq:activemq /dongguangming/apache-activemq-5.15.9
最后启动服务
bin/activemq start
查看其运行状态
bin/activemq status
可以通过web管理界面看效果http://192.168.8.200:8161/(ip地址依实际情况而改),默认用户名admin,密码admin
最后可以把activemq设置为开机服务
创建服务文件
touch /etc/systemd/system/activemq.service
编辑该文件键入以下内容(注意activemq路径按实际情况写)
vi /etc/systemd/system/activemq.service
[Unit]
Description=Apache ActiveMQ Message Broker
After=network-online.target
[Service]
Type=forking
User=activemq
Group=activemq
WorkingDirectory=/dongguangming/apache-activemq-5.15.9/data
ExecStart=/dongguangming/apache-activemq-5.15.9/bin/activemq start
ExecStop=/dongguangming/apache-activemq-5.15.9/bin/activemq stop
Restart=on-abort
[Install]
WantedBy=multi-user.target
设置服务文件生效
# systemctl daemon-reload
# systemctl start activemq.service
# systemctl enable activemq.service
# systemctl status activemq.service
总之,ActiveMQ用途很广泛,不管是业务场景还是集成到第三方工程框架。
参考软文:
- 中间件 https://baike.baidu.com/item/%E4%B8%AD%E9%97%B4%E4%BB%B6/452240?fr=aladdin
-
中间件是什么意思?中间件技术简介 https://www.redhat.com/zh/topics/middleware/what-is-middleware
- 什么是中间件?常见中间件有哪些? http://c.biancheng.net/view/3860.html
-
史上最全数据库中间件详解 https://www.sohu.com/a/336811296_505827
-
分布式环境中怎么选择缓存中间件? https://www.sohu.com/a/294739348_100212268
-
IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?https://zhuanlan.zhihu.com/p/37993013
-
分布式事务中间件Seata的设计原理 https://www.sohu.com/a/326431135_661203,https://zhuanlan.zhihu.com/p/73263135
-
ActiveMQ的安装和基本使用https://blog.51cto.com/mazongfei/2415479
-
CentOS 7下ActiveMQ安装配置 https://linuxeye.com/474.html
-
消息中间件及ActiveMQ介绍 https://segmentfault.com/a/1190000014958916
- ActiveMQ使用笔记 http://www.360doc.com/content/14/0328/08/2795334_364337432.shtml
-
ActiveMQ---知识点整理 http://www.uml.org.cn/zjjs/201802111.asp
-
ActiveMQ 优化 https://www.w3cschool.cn/cuhkj/cuhkj-ld682658.html
-
ActiveMQ高级特性 https://www.iteye.com/blog/m635674608-2153359
-
ActiveMQ Redelivery Policy(消息重发策略) https://www.iteye.com/blog/isoftyh-1830288
-
ActiveMQ高可靠性解决方案 https://www.iteye.com/blog/kavy-2095822
-
How to Install Apache ActiveMQ on CentOS/RHEL 8
https://www.tecmint.com/install-apache-activemq-on-centos-rhel/
参考书籍:
- O'Reilly - Java Message Service https://github.com/dongguangming/java/blob/master/O'Reilly%20-%20Java%20Message%20Service.pdf
- ActiveMQ in Action https://github.com/dongguangming/java/blob/master/ActiveMQ%20in%20Action.pdf