? ? ? ?我們在平時的開發(fā)中凡桥,經(jīng)常需要使用發(fā)布訂閱(Pub/Sub)模式來進(jìn)行消息處理毕泌。Java提供了很多中間件來供開發(fā)者來根據(jù)自己的需求來使用隅很。常見的有基于jms的消息中間件:kafka,rocketmq,rabbitmq.但是很多開發(fā)的同學(xué)可能不知道淘正,Redis也提供了Pub/Sub模式祸穷,Guava中的 EventBus也可以認(rèn)為是Pub/Sub模式,還有Hazelcast也提供了Pub/Sub功能.
?? ? ?消息中間件kafka,rocketmq,rabbitmq,ons都是實(shí)現(xiàn)了jms協(xié)議的停蕉,他們一般都是有一個中間件服務(wù)器愕鼓,就相當(dāng)于一個代理,來隔離Pub端和Sub端慧起。Pub端和Sub端都是通過中間服務(wù)器來進(jìn)行交互菇晃。消息中間件可以支持消息的發(fā)布訂閱,消息甚至可以是有序的蚓挤,或者廣播模式磺送。
? ? ?Redis也提供了Pub/Sub功能,java客戶端封裝了其內(nèi)部的pub/sub命令灿意,使用起來也很簡單估灿,本人做過測試,如果對消息可靠性要求不是很高缤剧,可以使用redis提供對pub/sub功能
? ? Hazelcast提供對pub/sub主要是集群內(nèi)有效的馅袁。Hazelcast是個很神奇的框架,它提供了分布式的Map,Queue,Set,List,Job,CountdownLatch等功能荒辕,topic發(fā)布訂閱只是其功能之一汗销。接入也很簡單犹褒。
Guava的EventBus也可以當(dāng)作一個Pub/Sub模式,用戶只需要使用@Subscriber注冊的方法進(jìn)行消息處理即可弛针。
@程序員