GO语言实现RabbitMQ
利用Go语言来实现RabbitMQ的几种工作模式
RabbitMQ基础代码如下
|
|
简单模式(点对点模式)
应用场景:发送验证码,
一个生产者,一个消费者。生产者将消息放入队列,消费者监听消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理就已经从队列中消失了,造成消息的丢失)
简单模式下生产者代码:
对于高并发来说,防止资源产生竞争关系,我在生成端添加了互斥锁,要保证信息已经成功的被添加到队列中;队列创建好,我们就把产生的消息发送出去。相关参数介绍我已经在代码里做了备注。
接下来我们来实现,消费端的代码:
消费端同样首先判断队列是否生成成功,接下来要注意的地方就是,RabbitMQ的限流,等消费者消费完一个信息,才去接收下一个信息,防止消费端在处理类似于Mysql数据库的时候发生暴库,具体实现如下:
|
|
工作模式
应用场景: 抢包红;大项目中的资源调度;秒杀系统的订单处理服务等
一个生产者,多个消费者,每个消费者获取到的消息唯一。工作模式对于简单模式的代码来说是一样的,只是消费端的个数增加了,这种情况适用于生产者生成消息过于快,消费端来不及消费,才会采用多个消费端进行消费。
订阅模式
短信群发;发送广播,公告消息等
一个生产者发送的消息会被多个消费者获取。
实例订阅模式的代码如下:
订阅模式下的生产端的代码如下:
订阅模式的消费端代码:
路由模式
发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key
路由模式的实例代码如下:
注意路由模式和订阅模式的区别在于,将广播模式改为direct模式
消费端代码实现:
在声明交换机的时候,将广播模式改为direct模式。绑定队列的时候,要将key参数进行添加,代码如下所示:
话题模式
将路由键和某模式进行匹配,此时队列需要绑定在一个模式上。“”和“#”代表通配符,“#”匹配一个词或多个词,“”只匹配一个词。
消息产生者产生消息,把消息交给交换机,交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息进行消费
和路由模式的区别在于,将交换机的模式改变为topic模式,其他的不变。