欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

<七>基于淘宝Fourinone实现MQ demo

程序员文章站 2022-03-03 08:14:05
...
FourInOne也可以当成简单的mq来使用,该demo演示了队列和主题订阅两种模式的实现

一、队列
将domain视为mq队列,每个node为一个队列消息,检查domain的变化来获取队列消息。
Sender:是一个队列发送者,他发送消息的实现是在queue上创建一个匿名节点来存放消息
pl.create(queue, (Serializable)obj);

Receiver:是一个队列接收者,他轮循queue上有没有最新消息,有就取出,并删除该节点,注意他是每次获取第一个消息,这样保证消息读取的顺序。

运行步骤:
1、启动ParkServerDemo(它的IP端口已经在配置文件指定)
2、运行Sender
3、运行Receiver

二、主题订阅
可以将domain视为订阅主题,将每个订阅者注册到domain的node上,发布者将消息逐一更新每个node,订阅者监控每个属于自己的node的变化事件获取订阅消息,收到后清空内容等待下一个消息,多个消息用一个arraylist存放

Publisher:是一个主题发布者,他通过pl.get(topic)获取topic主题的所有订阅者节点,并将消息更新到每个节点上,如果有多个追加到arraylist存放

Subscriber:是一个消息订阅者,他通过subscrib(String topic, String subscribeName, LastestListener lister)实现消息订阅,其中3个参数分别是主题名、订阅者名称、事件处理实现。Subscriber实现了LastestListener事件处理接口happenLastest(LastestEvent le),这个接口会传入更新的节点内容对象,然后Subscriber用一个空的arraylist清空内容,等待下一次接收消息。happenLastest有个boolean返回值,如果返回false,它会一直监控变化,继续有新的变化时还会进行事件调用;如果返回true,它完成本次事件调用后就终止。

运行步骤:
1、启动ParkServerDemo(它的IP端口已经在配置文件指定)
2、运行Subscriber,因为Subscriber可以有多个,传入不同的subscribeName参数代表不同的Subscriber
3、运行Publisher

FourInOne不实现JMS的规范,不提供JMS的消息确认和消息过滤等特殊功能,不过开发者可以基于FourInOne自己去扩充这些功能,包括mq集群。如果需要事务处理可以将多个消息封装在一个集合内进行发送,上面的队列接收者收到消息后删除实际上是一种消息确认方式,也可以将业务逻辑处理完后再进行删除。如果需要持久保存消息可以在封装一层消息发送者,发送前后根据需要进行数据库或者文件持久保存。利用一个独立的domain/node建立队列或者主题的key隐射,再仿照上面分布式缓存的智能根据key定位服务器的做法实现集群管理。

邮箱:fourinone@yeah.net
企鹅群:1313859

本demo源码可以在开发包中下载

下载地址:
http://www.skycn.com/soft/68321.html