鉴于YouTube,Facebook和其他社交媒体服务的兴起,发布者-订阅者是一个熟悉的概念。基本概念是,Publisher有谁创造内容,Subscriber谁消费内容。每当Publisher生成内容时,都会Subscriber通知每个内容。Subscribers理论上可以订阅多个发行商。
通常ContentServer在发布者和订阅者之间有一个,以帮助调解消息传递
public class Publisher { ... public Publisher(Topic t) { this.topic= t; } public void publish(Message m) { ContentServer.getInstance().sendMessage(this.topic, m); } }
public class ContentServer { private Hashtable<Topic, List<Subscriber>> subscriberLists; private static ContentServer serverInstance; public static ContentServer getInstance() { if (serverInstance == null) { serverInstance = new ContentServer(); } return serverInstance; } private ContentServer() { this.subscriberLists= new Hashtable<>(); } public sendMessage(Topic t, Message m) { List<Subscriber> subs = subscriberLists.get(t); for (Subscriber s : subs) { s.receivedMessage(t, m); } } public void registerSubscriber(Subscriber s, Topic t) { subscriberLists.get(t).add(s); }
public class Subscriber { public Subscriber(Topic...topics) { for (Topic t : topics) { ContentServer.getInstance().registerSubscriber(this, t); } } public void receivedMessage(Topic t, Message m) { switch(t) { ... } } }
通常,pub-sub设计模式是在考虑多线程视图的情况下实现的。一种较常见的实现将每个都Subscriber视为一个单独的线程,并ContentServer管理线程池
我使用Java创建Redis Pub/Sub,其中包含单个主题和单个侦听器,如thank: 这是我在MVCConfiguer中的bean: 这就是我接收消息的地方,请不要使用这个RedisMsghandler类来MvcConfigrer 我的主要目标是创建多个主题和多个听众,如RedisMsgHandler,请告诉我如何做。 我不喜欢创建大量在MessageListener上实现的类,也不喜欢为每
简介 Redis 的列表类型键可以用来实现队列,并且支持阻塞式读取,所以 Redis 能够非常容易的实现一个高性能的优先队列。同时在更高层面上,Redis 还支持“发布/订阅”的消息模式,可以基于此构建一个聊天系统。 发布示例 发布(Publish)即将消息发布到频道中。示例代码: // 发送消息 Redis::publish('chan-1', 'Hello, World!'); // 发送消息
主要内容:发布/订阅流程,常用命令汇总,基本命令应用Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)。 消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的
发布/订阅 消息顺序 当使用 pub/sub API的时候,你需要做一个决定:那就是对于来自同一个连接的消息是应该按顺序处理还是应该并行处理。 按顺序处理意味着你不需要关心线程安全,并且保持了事件的顺序;消息会以完全相同的顺序接收处理(通过队列),因此,这意味着消息能够被相互延迟。 另外一种选择是并发处理。使用并发处理 不能保证 工作处理的有序性,并且你的代码要对并行消息完全负责确保它不会破坏内部
发布和订阅 Meteor 服务端可以通过Meteor.publish发布文档集,同时客户端可以通过Meteor.subscribe订阅这些发布。 任何客户端订阅的文档都可以通过find方法进行查询使用。 默认情况下,每个新创建的 Meteor 应用包含有 autopublish 包,它会自动为每个客户端发布所有可用的文档。 为了可以更细化的控制不同客户端所接收的数据文档,首先应该在终端移除 aut
Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式, 下文先讨论订阅/发布到频道的实现, 再讨论订阅/发布到模式的实现。 频道的订阅与信息发送 Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端