消息队列ActiveMQ介绍

JMS全称:Java Message Service中文:Java消息服务。JMS是java的一套API标准,最初的目的是为了是应用程序能够访问现有的MOM系统(MOM是Message Oriented Middleware英文的缩写,指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。) 后来被许多现有的MOM供应商采用,并实现为MOM系统。【常见的MOM系统包括Apache的ActiveMQ、阿里巴巴的RocketMQ、IBM的MQSeries、Microsoft的MSMQ、BEA的RabbitMQ等。(并非全部的MOM系统都遵循JMS规范)】注意:JMS是一个标准名称,MOM是一套系统名称,这套系统指的就是上面所说的利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成;而随后各大企业研发了属于自己的MOM系统,并重新命名,例如Apache研发的ActiveMQ,阿里巴巴的RoketMQ等。

“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,包含嵌入对象。消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器,消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接受者不可用,消息队列会保留消息,直到成功地传递给消息处理者(接收人)。

消息队列的主要特点是异步处理,主要目的是减少请求响应的时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时“同步”返回结果的操作作为消息然后将该消息放入“消息队列”。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦合。如:跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口,基于消息队列的耦合,不需要发送方和接收方同时在线。

在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法。应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰期时的大量订单可以积压在队列中慢慢被处理掉。由于同步通常以为着阻塞,而大量线程的阻塞会降低计算机的处理能力。

消息驱动和架构(EDA),系统分解为消息队列,和消息制造者以及消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规划。跨局域网,甚至跨城市的通讯,比如北京机房与广州机房的应用程序通信。
ActiveMQ的特性

1.多种语言和协议编写的客户端。语言:Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议:Openwire,Stomp REST,WS Notification,XMPP,AMQP。
2.对Spring的支持。ActiveMQ可以很容易内嵌到使用Spring的系统里面去通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
3.支持多种传输协议。in-VM,TCP,SSl,NIO,UDP,JGroups,JXTA,支持通过JDBC和journal提供高速的消息持久化
4.从设计上保证了高性能的集群。客户端-服务器,点对点
5.支持Ajax
6.支持Axis的整合,WebServices
7.可以很容易的调用内嵌JMS provider,进行测试

ActiveMQ的应用场景

1.多个项目之间集成 (1)跨平台 (2)多语言 (3)多项目
2.降低系统间模块的耦合度,解耦 (1)软件扩展性
3.系统前后端隔离 (1)前后端隔离,屏蔽高安全区

ActiveMQ名词简介

Destination 目的地,JMS Provider(消息中间件)负责维护,用于对Message进行管理的对象。MessageProducer需要指定Destnation才能发送消息,MessageConsumer需要指定Destination才能接收消息。

Producer 消息生成者(客户端、负责生成消息),负责发送Message到目的地。应用接口为MessageProducer。在JMS规范中,所有的标准定义都在javax.jms包中。*

Consumer【Receiver】 消息消费者(负责处理消息),负载从目的地中消费【处理|监听|订阅】Message。应用接口为MessageConsumer。

Message 消息(Message),消息封装一次通信的内容。常见类型有:StreamMessage(流信息)、BytesMessage(字节信息)、TextMessage(文本信息)、ObjectMessage(对象信息)、MapMessage(图信息)。

ConnectionFactory 连接工厂,用于创建链接的工厂类型。注意,不能和JDBC中的ConnectionFactory混淆。

Connection 链接,用于建立访问ActiveMQ连接的类型,由链接工厂创建,注意,不能和JDBC中的Connection混淆。

Session 会话,一次持久有效有状态的访问,由链接创建,是具体操作信息的基础支撑。

Queue & Topic Queue是队列目的地,Topic是主题目的地。都是Destnation的子接口。(1)Queue特点:队列中的消息,默认只能由唯一的一个消费者处理。一旦被消息消费者消费,存储在消息队列中的信息立刻被删除。(2)Topic特点:主题中的消息,会发送给所有的消费者同时处理。只有在消息可以重复处理的业务中场景中可使用。

PTP Point to Point。点对点消息模型。就是基于Queue实现的消息处理方式。

PUB & SUB Publish & Subscribe。消息的发布/订阅模型。是基于Topic实现的消息处理方式。

PTP处理模式(Queue)

1.消息生产者生产消息发送到queue中,然后消息消费者从Queue中取出并且消费信息。
2.消息被消费以后,Queue中不在有存储,所有消息消费者不可能消费到已经被消费的信息。
3.Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消息,其它的则不能消费此信息了。
4.当消费者不存在时,消息会一直保存,直到有消费消费。

Publish/Subscribe处理模式

1.消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该信息。2.和点对点方式不同,发布到topic的消息会被所有订阅者消费。3.当生产者发布消息,不管是否有消费者。都不会报错信息 4.一定要先有消息的消费者,后有消息的生产者

PTP和PUB/SUB简单对比

下载资源

ActiveMQ下载页面:http://activemq.apache.org/download.html
JDK下载页面:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
注意:版本说明
ActiveMQ5.10.x以上版本必须使用JDK1.8才能正常使用。
ActiveMQ5.9.x及以下版本使用JDK1.7即可正常使用。

上传服务器

在此我们使用JDK版本:jdk-8u191-linux-x64.tar.gz
在此我们使用的ActiveMQ版本:apache-activemq-5.15.6-bin.tar.gz

解压安装

[root@CentOS src]# tar xf jdk-8u191-linux-x64.tar.gz
[root@CentOS src]# tar xf apache-activemq-5.15.6-bin.tar.gz
[root@CentOS src]# mv jdk1.8.0_191 /usr/local/java
[root@CentOS src]# mv  apache-activemq-5.15.6 /usr/local/activemq
[root@CentOS src]# tail -1 /etc/profile
export PATH=/usr/local/java/bin:$PATH
[root@CentOS src]# source /etc/profile
[root@CentOS src]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
activemq文件简介[root@CentOS /]# ls /usr/local/activemq/
activemq-all-5.15.6.jar  conf  docs      lib      NOTICE      tmp      webapps-demo
bin   data  examples  LICENSE  README.txt  webapps
activemq-all-5.15.6.jar:Java开发客户端的jar包
webapps:activemq提供了一个网页管理的控制台,http://127.0.0.1:8161/admin可以访问到,可以放置web的程序目录
webapps-demo:activemq提供了一些基础案
lib:是activemq依赖的jar包文件
examples:apache提供了一个案例代码
docs:帮助文档
data:activemq默认用来存储数据的位置
conf:配置文件
bin:二进制文件,用来启动、关闭、重启activemq的控制文件

配置文件简介

[root@CentOS /]# ls /usr/local/activemq/conf/activemq.xml           client.ks                   groups.properties       jmx.access          login.configbroker.ks              client.ts                   java.security           jmx.password        users.propertiesbroker-localhost.cert  credentials-enc.properties  jetty-realm.properties  log4j.propertiesbroker.ts              credentials.properties      jetty.xml               logging.properties

activemq.xml: activemq的主配置文件,就是spring配置文件. 其中配置的是ActiveMQ应用使用的默认对象组件.transportConnectors标签,配置链接端口信息的。其中的端口号61616是ActiveMQ对外发布的tcp协议访问端口. 就是java代码访问ActiveMQ时使用的端口

jetty.xml: spring配置文件, 用于配置jetty服务器的默认对象组,件jetty是类似tomcat的一个中间件容器。ActiveMQ默认支持一个网页版的服务查看站点. 可以实现ActiveMQ中消息相关数据的页面查看.8161端口, 是ActiveMQ网页版管理站点的默认端口。在ActiveMQ网页版管理站点中,需要登录, 默认的用户名和密码都是admin。

users.properties: 是用于配置客户端通过协议访问ActiveMQ时,使用的用户名和密码。格式为:用户名=密码

groups.properties: 是用于配置客户端通过协议访问ActiveMQ时,使用的组名和用户名。格式为:组名=用户名

jetty-realm.properties: 为jetty.xml网页控制台所用到配置文件 该文件内关联了登录web网页控制台的用户名密码

启动ActiveMQ

[root@CentOS /]# /usr/local/activemq/bin/activemq start
INFO: Loading '/usr/local/activemq//bin/env'
INFO: Using java '/usr/local/java/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/usr/local/activemq//data/activemq.pid' (pid '3637')注意:ActiveMQ启动需要拉起jetty中间件,该中间件启动较慢,请耐心等待......
启动好了之后,会出现以下端口,里面的8161为web页面所提供默认的web访问端口,如需修改请修改jetty.xml文件
[root@CentOS /]# ss -anplt | grep java
LISTEN     0      50          :::8161                    :::*                   users:(("java",pid=3637,fd=141))
LISTEN     0      50          :::37253                   :::*                   users:(("java",pid=3637,fd=13))
LISTEN     0      128         :::5672                    :::*                   users:(("java",pid=3637,fd=131))
LISTEN     0      128         :::61613                   :::*                   users:(("java",pid=3637,fd=132))
LISTEN     0      50          :::61614                   :::*                   users:(("java",pid=3637,fd=134))
LISTEN     0      128         :::61616                   :::*                   users:(("java",pid=3637,fd=126))
LISTEN     0      128         :::1883                    :::*                   users:(("java",pid=3637,fd=133))

测试访问jetty所提供的web控制台

•控制台地址:http://IP:8161/admin
•默认用户名和密码都为admin


1.ActiveMQ网页状态栏内容介绍
2.Home:主页面,有欢迎界面,broker标签介绍,一些基础信息
3.Queues:队列的详细信息,包含了待处理消息数量、消费者数量、消息队列、已消费信息等
4.Topics:主题的详细信息,包含了消费者数量、消息队列和Queues差不多
5.Subscribers:订阅者,专门用于检查发布/订阅的端口
6.connections:连接,查看ActiveMQ所有支持的协议的连接数量等信息
7.Network:网络,有关于远程网络的标签,远程网络地址等信息
8.Scheduled:调动程序,可以理解为定时任务
9.Send:发送,测试发送消息的功能,里面包含了模拟发送消息的目的地、相关ID、回复、类型、消息组、延迟时间(毫秒)、重复次数、要发送的消息数量等等

测试Web页面Send功能


发送过之后会自动跳到Queue或者Topic,取决于你发送的消息类型,更多功能请自行测试

扩展


https://www.jianshu.com/u/2a55010e3a04

参考链接 :

消息队列ActiveMQ : https://mp.weixin.qq.com/s/UaIWI0piXfpsQltLFgXdcA

CentOS源码安装消息队列ActiveMQ相关推荐

  1. mysql centos 源码安装_CentOS5下MySQL源码安装方式

    1.编译环境安装 uname -aLinux ha01 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Lin ...

  2. centos 源码安装mysql5.6_CentOS 7下源码安装MySQL 5.6

    目录 准备工作 运行环境 确认你的安装版本 下载MySQL 安装MySQL 准备安装环境 编译和安装 配置MySQL 单实例配置 单实例配置方法 添加防火墙 启动MySQL 重启MySQL 多实例配置 ...

  3. centos 源码安装:iftop

    iftop是linux下的一个流量监控工具,用于查看实时网络流量,反向解析IP,显示端口信息 官网:http://www.ex-parrot.com/~pdw/iftop/ 源码安装iftop,需要基 ...

  4. 7 centos 源码安装samba_在CentOS7.6里编译安装PHP7.4(最新版),很详细

    拿到一个空的服务器,首先我们就要来用起来啦! 首先要先下载并编译安装PHP最新版本,请到php官网下载: 这里我首先在系统里在新建存储源码包的文件夹,比如我存放在这里 下载安装PHP7.4之前,你要先 ...

  5. 7 centos 源码安装samba_CentOS搭建WonderTrader开发环境及v0.5.4版本发布

    前言 之前发过一篇关于如何搭建WonderTrader开发环境的文章<从零搭建WonderTrader的开发环境>,帮助不少用户解决了一些编译源码的问题.因为笔者是在Ubuntu 18.0 ...

  6. 7 centos 源码安装samba_Centos-7安装zabbix

    本例环境使用Centos7.3 64位 安装zabbix需要mysql的支持,下面是快速安装LNMP的方法(使用EZHTTP安装) 安装LNMP 首先创建一个目录存放下载文件: [root@local ...

  7. Centos源码安装Python3

    CentOS7默认安装了python2.7.5,当需要使用python3的时候,可以手动下载Python源码后编译安装. 下载python(https://www.python.org/ftp/pyt ...

  8. centos 源码安装 mysql

    由于mysql5.5开始,不再使用configure安装,而是使用cmake.所以需要先安装cmake wget http://www.cmake.org/files/v2.8/cmake-2.8.6 ...

  9. Centos源码安装Cmake

    获取Cmake源码包 https://cmake.org/files/v3.14/cmake-3.14.5.tar.gz 解压CMake源码包 tar -zxvf cmake-2.8.10.2.tar ...

最新文章

  1. 零基础入门学习Python(34) 面向对象
  2. java基本数据类型自动转包装类,Java String和基本数据类型之间的转换(包装类)
  3. SAP Spartacus 4.0 ng serve 之后,localhost 4200 会后面自动添上 electronics-spa 吗?
  4. testmeshpro合批_TextMesh Pro Emoji Align With Text(表情和文字对齐)
  5. python海龟绘图画树_Python:海龟绘图(二)
  6. 找出一棵树某一深度所有节点
  7. tomcat启动后访问404_伪Tomcat
  8. STM32F103_DDWG窗口看门狗
  9. java各种排序实现
  10. 【问题解决方案】visudo: /etc/sudoers is busy, try again later
  11. 为何网站天天更新收录还是那么慢吗
  12. centos 32 mysql_CentOS 6.8 32位 安装mysql8
  13. 遥感数据免费获取网址
  14. 221. Maximal Square
  15. 爱吃喵粮的小招喵(查找,动态规划)
  16. 跑步装备品牌排行榜,跑步爱好者必备好物推荐
  17. 表白神器-摩斯密码1121311233321113212313323332113
  18. 如何对固定资产、耗材全流程管理
  19. java错误信息表_java报表
  20. N次笑N次据说可以让人年轻10岁的故事

热门文章

  1. 各大厂商CTR广告预估模型的优缺点对比
  2. 交流信号叠加直流偏置_高速数字电路设计通关五部曲(二):接口信号匹配与对接...
  3. activity调用fragment的方法_Fragment 的现在以及未来
  4. poj 1330(LCA)
  5. centos java7安装_Centos7 JDK7安装配置
  6. php学籍信息管理系统心得_php实现学生管理系统
  7. 窗口操作-关闭,最小化
  8. springboot异常
  9. HTAP数据库 PostgreSQL 场景与性能测试之 1 - (OLTP) 点查
  10. 关于gevent的协程间通信及队列和事件event用法