回忆录之 消息中间件ActiveMQ

 

当系统业务量不是太大(未到百万千万过亿时),使用消息中间件ActiveMQ也可以,就简要记录下以前某治安监控系统用的ActiveMQ(可能当时版本有点老)。

 

1.  什么是中间件

在介绍ActiveMQ之前,简介介绍下什么是中间件。

中间件是介于操作系统和在其上运行的应用程序之间的软件。中间件实质上充当隐藏转换层,实现了分布式应用程序的通信和数据管理。它有时被称为管道,因为它将两个应用程序连接在一起,使数据和数据库可在“管道”间轻松传递。 通过中间件,用户可执行很多请求,例如在 Web 浏览器上提交表单,或者允许 Web 服务器基于用户的配置文件返回动态网页。

常见的中间件示例包括数据库中间件、应用程序服务器中间件、面向消息的中间件、Web 中间件和事务处理监视器。每个程序通常都会提供消息传递服务,让不同的应用程序可使用简单对象访问协议 (SOAP)、Web 服务、表述性状态转移 (REST) 和 JavaScript 对象表示法 (JSON) 等消息传递框架进行通信。虽然所有中间件都执行通信功能,但公司选用的类型将取决于要使用的服务以及需要传达的信息类型。这可包括安全身份认证、事务管理、消息队列、应用程序服务器、Web 服务器和目录。中间件还可用于实时发生的操作的分布式处理,而不是来回发送数据。

2.  常用中间件分类

2.1  数据库中间件

回忆录之 消息中间件ActiveMQ_第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

回忆录之 消息中间件ActiveMQ_第2张图片

然后解压缩

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

 回忆录之 消息中间件ActiveMQ_第3张图片

可以通过web管理界面看效果http://192.168.8.200:8161/(ip地址依实际情况而改),默认用户名admin,密码admin

回忆录之 消息中间件ActiveMQ_第4张图片

 最后可以把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用途很广泛,不管是业务场景还是集成到第三方工程框架。

回忆录之 消息中间件ActiveMQ_第5张图片

 

参考软文:

  1. 中间件  https://baike.baidu.com/item/%E4%B8%AD%E9%97%B4%E4%BB%B6/452240?fr=aladdin
  2. 中间件是什么意思?中间件技术简介 https://www.redhat.com/zh/topics/middleware/what-is-middleware

  3.  什么是中间件?常见中间件有哪些? http://c.biancheng.net/view/3860.html
  4.  史上最全数据库中间件详解  https://www.sohu.com/a/336811296_505827

  5. 分布式环境中怎么选择缓存中间件? https://www.sohu.com/a/294739348_100212268

  6. IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?https://zhuanlan.zhihu.com/p/37993013

  7. 分布式事务中间件Seata的设计原理 https://www.sohu.com/a/326431135_661203,https://zhuanlan.zhihu.com/p/73263135

  8. ActiveMQ的安装和基本使用https://blog.51cto.com/mazongfei/2415479

  9. CentOS 7下ActiveMQ安装配置 https://linuxeye.com/474.html

  10. 消息中间件及ActiveMQ介绍 https://segmentfault.com/a/1190000014958916

  11. ActiveMQ使用笔记 http://www.360doc.com/content/14/0328/08/2795334_364337432.shtml
  12. ActiveMQ学习总结 https://www.cnblogs.com/cxyyh/p/10700437.html

  13. ActiveMQ---知识点整理 http://www.uml.org.cn/zjjs/201802111.asp

  14. 消息中间件学习总结  https://www.ppkanshu.com/index.php/post/3677.html

  15. ActiveMQ 优化 https://www.w3cschool.cn/cuhkj/cuhkj-ld682658.html

  16. ActiveMQ高级特性 https://www.iteye.com/blog/m635674608-2153359

  17. ActiveMQ Redelivery Policy(消息重发策略) https://www.iteye.com/blog/isoftyh-1830288

  18. ActiveMQ高可靠性解决方案 https://www.iteye.com/blog/kavy-2095822

  19. 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

你可能感兴趣的:(回忆录之 消息中间件ActiveMQ)