zoukankan      html  css  js  c++  java
  • 回忆录之 消息中间件ActiveMQ

    当系统业务量不是太大(未到百万千万过亿时),使用消息中间件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用途很广泛,不管是业务场景还是集成到第三方工程框架。

    参考软文:

    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_661203https://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/

    参考书籍:

  • 相关阅读:
    Python异常处理
    python抽象类
    python传参*和**的区别
    python 多重继承构造函数调用顺序
    linux 自启动 | 三种方式自启动
    Linux 项目 shell 自动获取报告本机IP (1) | 通过shell 自动获取报告本机IP
    Go 基础学习笔记 (5)| 数据类型说明与使用
    GO 基础学习笔记(4)| 参数传递
    生活问题 | 对华为畅玩手机5X进行升级
    markdown 语法
  • 原文地址:https://www.cnblogs.com/dongguangming/p/13183569.html
Copyright © 2011-2022 走看看