go 封装 ActiveMq,并实现 topic 和 queue 的生产和消费
需要了解的基础知识
- 总所周知 activemq 有两种消息传递类型分别为
queue
Point-to-Point,点对点通信模型,即一个生产者对应一个消费者topic
publish-and- subscribe,发布订阅模型,一个生产者可根据订阅向多个消费者推送数据
- go 连接 activemq 的官方推荐包为
github.com/go-stomp/stomp
go 连接 ActiveMq 遇到的坑
但由于国内使用 activemq 的公司较少,所以对于如何使用 go 操作 activemq 的资料也较少,下面我将分享一下我在使用 go 连接 activemq 上遇到的一些坑
-
如何推送信息到
topic
和queue
?使用
go-stomp
的send
方法推送数据给 activemq 的时候,系统是根据前缀是topic还是queue来判断推送给topic还是queue的,例如我要推送到一个名为 hello 的消息类型-
推送给
topic
conn.Send("/topic/hello", "text/plain", []byte(<-c))
-
推送给
queue
conn.Send("/queue/hello", "text/plain", []byte(<-c))
-
-
如何从
topic
和queue
中消费信息topic 的消费一定要注意要先订阅在生产,因为 topic 属于发布订阅模式,只会推送订阅 topic 后生产的信息,就像人们订阅报纸一样,订阅下半年的报纸就只会等到下半年报纸生产了后发给你,而不会把上半年的报纸也发给你。
queue 则无需注意什么生产的顺序,只要有消息没有被消费,那么这个消息就可以被消费,就有点像你的银行卡里的钱,不管是啥时候存进去的,只要有余额就可以取出来消费
-
消费 topic 的消息
go Consumer(topic, activeMq
-