简介
消息队列,用于系统之间通信。
与dubbo+zookeeper 在不同层之间调用,ActiveMQ 可以解决同层之间的通信。
dubbo+zookeeper 有启动顺序,如果服务提供者没有启动,先启动消费者,会报错。所以同层之间如果来回引用,就不知道怎么启动了。
ActiveMQ可以实现,数据同步。如果新添加的数据,可以使用ActiveMQ 通知其他用到这些数据服务且存到缓存中的,可以更新缓存了(solr搜索引擎,redis 缓存)。
安装
运行:/bin activemq
用户名:admin
密码:admin
消息传递
对于消息的传递有两种类型:
一种是点对点的
,即一个生产者和一个消费者一一对应;
另一种是发布
/
订阅模式
,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
格式
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
· StreamMessage -- Java原始值的数据流
· MapMessage--一套名称-值对
· TextMessage--一个字符串对象
· ObjectMessage--一个序列化的 Java对象
· BytesMessage--一个字节的数据流
测试
点对点
发送方
接收方 开一个socket 监听这个接口
订阅者模式
发送者 唯一改变的是
Topic topic = session.createTopic("");
接收者
Topic topic = session.createTopic("springtestTopic");
两者的不同是
点对点 会将消息存储
订阅者 不管你接收没接受到
spring+ActiveMQ
步骤
添加依赖包
发送方
spring 中配置
发送方通过 jmstemple 发送 queue 或者 topic
接收方
配置一个spring实现好的调用监听器类DefaultMessageListenerContainer 传入连接,发送方式,监听器,当创建这个对象的时候就不停的监听了。
在实现 messageListener 中编写我们 接收到信息以后 要做的事情。
注意:如果将通知放到service 层那么就会遇到 ,事务还没提交就求发送消息了,这样数据库中数据还没有更新。
所以可以在接收消息的时候,延迟一下在取查询数据库。
可以放在表现层的 controller 中。
|