ActiveMQ安装运行

发布 : 2016-02-12 分类 : 大数据 浏览 :

ActiveMQ

1
Java消息服务中间件:Apache的ActiveMQ、阿里巴巴的RocketMQ

背景&JMS概述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
当前,CORBA、DCOM、RMI等RPC中间件技术已广泛应用于各个领域。
但是面对规模和复杂度都越来越高的分布式系统,这些技术页显示出其局限性:

(1)、同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行
(2)、客户和服务对象的声明周期紧密耦合:客户进程和服务对象进程都必须正常运行;
如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常
(3)、点对点通信:客户的一次调用只发送给单独的目标对象

面向消息的中间件较好的解决了以上问题。
发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在适合的时候再将消息转发给接收者。
这种模式下,发送和接收是异步的,发送者无需等待;
二者的生命周期未必相同;发送消息的时候接收者不一定运行,接受消息的时候发送者也不一定运行;
一对多通信;对于一个消息可以多个接收者

Java消息服务(JMS)定义了Java中访问消息中间件的接口。JMS只是接口,并没有给予实现,实现JMS接口的消息中间件称为JMS Provider,
已有的MOM系统包括Apache的ActiveMQ、以及阿里巴巴的RocketMQ、IBM的MQSeries、Microsoft的MSMQ和BEA的MessageQ、RabitMQ等等,
他们基本都遵守JMS规范

1.2.JMS术语

1
2
3
4
5
6
7
8
9
10
11
JMS实现JMS接口的消息中间件:
Provider:生产者
Consumer:消费者
PTP:Point tp Point,即点对点的消息模型
Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型
Queue:队列目标
Topic:主题目标
ConnectionFactory:连接工厂,JMS用它创建连接
Connection:JMS客户端到JMS Provider的连接
Destination:消息的目的地
Session:会话,一个发送或接收消息的线程

JMS术语概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ConnectionFactory接口(连接工厂)
用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植的接口访问连接,
这样当下层的实现改变时,代码不需要进行修改。
管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能查找到它们。
根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂

Connection接口(连接)
连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的连接。
根据不同的连接类型,连接允许用户创建会话,以发送和接收队列和主题到目标。

Destination接口(目标)
目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者队列,或者主题。
JMS管理员创建这些对象,然后用户通过JNDI发现他们。和连接工厂一样,管理员可以创建两种类型的目标,
点对点模型的队列,以及发布者/订阅者模型的主题

Message接口(消息)

是在消费者和生产者之间传送的对象,也就是说从从一个应用程序传送到另一个应用程序。一个消息有三个主要部分:
消息头(必须):包含用于识别和消息寻找路由的操作设置
一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)
一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)
消息接口非常灵活,并提供了许多方式来定制消息的内容

Session接口(会话)

表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。
会话的好处是它支持事务。如果用户选择了事务支持,绘画上下文将保存一组消息,知道事务被提交才发送这些消息。
在提交事务之前,用户可以使用回滚操作取消这些消息。一个会话允许用户创建消息生产者来发送消息,创建消息消费者来接收消息

消息格式定义

1
2
3
4
5
6
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收一些不同形式的数据,提供现有消息格式的一些级别的兼容性
StreamMessage:Java原始值的数据流
MapMessage:一套名称-值对
TextMessage:一个字符串对象
ObjectMessage:一个序列化的Java对象
ByteMessage:一个未解释字节的数据流

ActiveMQ

ActiveMQ简介

1
2
3
4
5
6
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,
但是JMS在当今的J2EE应用中间任然扮演着特殊的地位,可以说ActiveMQ在业界应用最广泛,
当然如果想要有更强大的性能和海量数据处理能力,ActiveMQ还需要不断的升级版本,80%以上的业务我们使用ActiveMQ以及足够满足需求,
当然后续如天猫、淘宝网这种大型的电商网站,尤其是双11这种特殊事件,ActiveMQ需要进行很复杂的优化源码以及架构设计才能完成,
我们之后会学习一个更强大的分布式消息中间件,RocketMQ,可以说ActiveMQ是核心,是基础,所以我们必须要掌握好

下载ActiveMQ

1
去官方网站下载:http://activemq.apache.org/

运行ActiveMQ

1
2
解压缩apache-activemq-5.9.0-bin.zip,
修改apache-activemq-5.9.0/conf目录中配置文件activeMQ.xml,将0.0.0.0修改为localhost
1
2
3
4
5
6
7
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"/>
<transportConnector name="ssl" uri="ssl://localhost:61617"/>
<transportConnector name="stomp" uri="stomp://localhost:61613"/>
<transportConnector uri="http://localhost:8081"/>
<transportConnector uri="udp://localhost:61618"/>
</transportConnectors>

1
2
然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。
启动ActiveMQ以后,登陆:http://localhost:8161/admin/,账号密码均为admin,创建一个Queue,命名为FirstQueue。

本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2016/02/12/ActiveMQ安装运行/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹