ActiveMQ

来源:互联网 发布:js移除最后一个子元素 编辑:程序博客网 时间:2024/05/16 05:46

1. JMS

当前,CORBA、DCOM、RMI 等RPC 中间件技术已广泛应用于各个领域。但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:

(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;

(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;

(3)点对点通信:客户的一次调用只发送给某个单独的目标对象。

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

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

1.1.jms概念

(1)JMS实现JMS 接口的消息中间件

(2)Provider(MessageProvider):生产者

(3)Consumer(MessageConsumer):消费者

(4)PTP:Point to Point,即点对点的消息模型;

(5)Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;

(6)Queue:队列目标;

(7)Topic:主题目标;

(8)ConnectionFactory:连接工厂,JMS 用它创建连接;

(9)Connection:JMS 客户端到JMS Provider 的连接;

(10)Destination:消息的目的地;

(11)Session:会话,一个发送或接收消息的线程;

(12)ConnectionFactory接口(连接工厂)

用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改。管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂。

(13)Connection接口(连接)

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

(14)Destination接口(目标)

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

(15)MessageConsumer接口(消息消费者)

由会话创建的对象,用于接收发送到目标的消息。消费者可以同步地(阻塞模式),或异步(非阻塞)接收队列和主题类型的消息。

(16)MessageProducer接口(消息生产者)

由会话创建的对象,用于发送消息到目标。用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。

(17)Message接口(消息)

是在消费者和生产者之间传送的对象,也就是说从一个应用程序创送到另一个应用程序。一个消息有三个主要部分:

消息头(必须):包含用于识别和为消息寻找路由的操作设置。

一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。

一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。

消息接口非常灵活,并提供了许多方式来定制消息的内容。

(18)Session接口(会话)

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

(19)JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

StreamMessageJava原始值的数据流

MapMessage一套名称-值对

TextMessage一个字符串对象

ObjectMessage一个序列化的 Java对象

BytesMessage一个未解释字节的数据流

2. ActiveMQ

底层使用小型数据库kahadb,保存消息??

默认端口号61616

2.1.点对点模式

Destinationdestination = session.createQueue(queueName);

p2p的过程理解起来更加简单。它好比是两个人打电话,这两个人是独享这一条通信链路的。一方发送消息,另外一方接收,就这么简单。在实际应用中因为有多个用户对使用p2p的链路,它的通信场景如下图所示:

2.2.发布订阅模式

Destinationdestination = session. createTopic(queueName);

发布订阅模式只有先订阅,然后发布的数据才有效。即消费者只能收到启动以后的服务端的数据。

发布订阅模式有点类似于我们日常生活中订阅报纸。比如北京日报、潇湘晨报等。那么这些个我们订阅的报纸就相当于发布订阅模式里的topic。有很多个人订阅报纸,也有人可能和我订阅了相同的报纸。那么在这里相当于我们在同一个topic里注册了。对于一份报纸发行方来说,它和所有的订阅者就构成了一个1对多的关系。这种关系如下图所示:

集群属性和配置说明文章

http://blog.csdn.net/jiangxuchen/article/details/8004570

http://blog.163.com/czg_e/blog/static/4610456120133943548952/

activemq的web管理界面:http://127.0.0.1:8161/admin

2.3.数据安全和负载均衡方案

(1)    数据安全:


(2)MQ的性能瓶颈一般都在消费者,我们一般采用以集群的方式对MQ内部的消息数据进行平均分配。在每台机器中,我们可以使用并行计算的方式——多线程处理任务

原创粉丝点击