JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明
1----------------------观察者模式------------------------------
观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。 activeMQ消息队列
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
2、-------------JMS介绍-----------------------
JMS的全称是Java Message Service,即Java消息服务。用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。
把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。
对于消息的传递有两种类型:
一种是点对点的,即一个生产者和一个消费者一一对应;
另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
3、---------------------ActiveMQ的安装-----------------------------------------------
进入http://activemq.apache.org/下载ActiveMQ
安装
安装步骤:
第一步:安装jdk,需要jdk1.7以上版本
第二步:解压缩activeMQ的压缩包。
第三步:进入bin目录。
启动:[root@localhost bin]# ./activemq start
停止:[root@localhost bin]# ./activemq stop
第四步:访问后台管理。
http://192.168.25.168:8161/admin
用户名:admin
密码:admin
4、----------------------------- JMS消息发送模式------------------------------------------------------------------
(1)在点对点或队列模型下,一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。
这种模式被概括为:只有一个消费者将获得消息。生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。每一个成功处理的消息都由接收者签收。
(2)发布者/订阅者模型支持向一个特定的消息主题发布消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式好比是匿名公告板。
这种模式被概括为:多个消费者可以获得消息.在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够购订阅。订阅者必须保持持续的活动状态以接收消息,
除非订阅者建立了持久的订阅。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。
5、----------------------------------Active整合spring-----------------------------------------------------
把ActiveMQ依赖的jar包添加到工程中。
activemq-all-5.12.0.jar
使用maven工程,则添加jar包的依赖:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.11.2</version>
</dependency>
同时需要配置生产消息者和消费消息者的配置 ----------------spring文件
6、-------------------------------消费者需要配置监听--------------------------------------
那么消费者是通过Spring为我们封装的消息监听容器MessageListenerContainer实现的,它负责接收信息,并把接收到的信息分发给真正的MessageListener进行处理。每个消费者对应每个目的地都需要有对应的MessageListenerContainer。
对于消息监听容器而言,除了要知道监听哪个目的地之外,还需要知道到哪里去监听,也就是说它还需要知道去监听哪个JMS服务器,这是通过在配置MessageConnectionFactory的时候往里面注入一个ConnectionFactory来实现的。
所以在配置一个MessageListenerContainer的时候有三个属性必须指定:
1、一个是表示从哪里监听的ConnectionFactory
2、一个是表示监听什么的Destination;
3、一个是接收到消息以后进行消息处理的MessageListener。
常用的MessageListenerContainer实现类是DefaultMessageListenerContainer。
public class MyMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
System.out.println(message);
}
}
总结:当我们去处理某些数据的时候,添加或者删除等给数据做出了一些修改,我们需要对关联这些数据的地方做出相应的修改,使用activeMQ消息队列可以帮助我们实现这一功能。
这里所运用到的JAVA的设计模式也就是我们所说的观察者模式,当然,消息队列中体现了一些其他的设计模式,比如装饰者模式等。