您的位置:首页 > 其它

项目实践——消息队列de使用

2017-10-07 23:13 162 查看
为什么要使用消息队列呢?因为建立索引的话,那么数据库的信息必须在索引库中,而如果在数据库中新增商品的话,那么如何才能让索引库知道自动添加进索引库呢?

此时就用了消息队列。消息队列就像是现实生活中的秘书一样,发布者就是老板,此时如果要开会,只需要给秘书说下午几点开会,哪个部门来,秘书具体的实现过程我们不必要了解,而部门来的时候带什么或者准备什么也不是我们关心的,我们只需要发布消息就行。

同步索引库分析,如果不用消息队列ActiveMQ的情况下

1,在商品添加的同时就使用solrj将商品也同时的添加到索引库中。

这个方法是可行的,但是只适合在传统项目,即只有一个web服务的情况下,当现在如果是面向服务SOA的架构呢,SOA架构即将所有的服务层和表现层分开,表现层能够调用服务层中的任何一个服务,此时的设计原则就是单一职能的原则,solr的使用是在search索引服务中,而商品添加是在manage的商品管理服务中的,这时候如果用上面说的在商品添加的同时就用solrj将商品也添加到索引库中的话,这时候业务逻辑就严重的耦合到了一块。

2,此时消息队列就出现了,实现了系统之间的解耦

ActiveMQ有两种消息形式:1,点到点的形式,2,发布/订阅模式,即广播形式

ActiveMQ可以发布多种消息:最常用的就是TextMessage

activeMQ的安装(因为是基于java开发的,所以前提jdk要安装好)

把压缩包中传送到服务器并且解压缩。

只需要启动即可,在bin目录下面    ./activemq start

active有个后台管理器,可以在浏览器中 输入       服务器地址:端口(8161)

ActiveMQ的使用方法,

消息的生产者:

1,先把jar包加入到项目中

2,创建一个连接工厂,connectionDactory  需要指定MQ服务的ip和端口号"tcp://192.168.25.3:61616"

3,使用connectionDactory创建一个连接对象 connection

4,开启连接调用connection对象的start方法

5,使用connection对象创建一个session对象,第一个参数是是否开启事务,一般不使用事务,因为只要保持数据的最终一致,如果第一个参数是true的话,第二个参数可以自动的忽略,如果不开启事务那么是falese,那么第二个参数是消息的应答模式,一种是自动应答,一种是手动应答,一般是自动应答

6,使用session对象创建一个destionation对象,两种形式,一种是queue,topic。参数就是消息对列的名称

7,使用session对象来创建一个producer对象。

8,创建一个textmessage对象,可以直接调用textmessage进行创建对象

9,发送消息,

10关闭资源

消息的消费者;

1,建立一个连接工厂对象,

2,使用连接工厂对象创建一个连接。

3,开启连接

4.使用连接对象创建一个session对象

5,使用session创建一个destination,destination应该和消息的发送端一致

6,使用session创建一个consumer对象

7.向consumer对象中设置一个messagelistener对象。用来接收消息

8,取出消息的内容

此时如果用框架的话,就得考虑activeMQ整合spring,既然都是固定的创建套路,所以直接用spring配置即可

整合的话得加入jar包,  spring-jms包,还有spring-context-suport

创建一个新的配置文件application-activemq,xml

配置文件的话可以上百度查。

束河使用JMSTemlate来发送消息呢?

首先得到JMS这个对象,让Spring加载配置文件中的对象

从容器中获得hms对象,。

从容器中获得destination对象

发送消息

此时就可以实现商品到数据库的同时也能将商品添加到索引库中了。因为activeMQ传送的消息可以自定义,所以可以把商品id传送出去‘
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: