RabitMQ---Publish/Subscribe

工作队列(work queue)是在如下假定的情况发生的:一个任务派遣给一个消费者

在这里,我们将发送一个消息给多个consumers.-----即发布/订阅模式(publish/subscribe)

exchange(交换机)

RabitMQ中消息模型的核心思想是:生产者从来不直接发送消息到队列中。实际上,生产者甚至不知道消息会被发送到队列里。

相反,生产者只能向交换机(exchange)发送消息。交换机一方面接收生产者发送的消息,另一方面把接收到的消息推送到队列中。交换机必须明确的知道如何处理接收到的消息。应该附加到一个特定的队列吗?应该附加到很多队列吗?应该被丢弃吗?这些规则有exchenge类型指定。

exchange类型有如下几种:direct  ,   topic   ,    headers  ,   fanout

声明一个exchange

err := ch.ExchangeDeclare(name string, type string, durable bool, auto-deleted bool, internal bool,no-wait bool, arguments Table)

最简单的exchange类型是fanout.把它接收到的所有消息广播到它已知的所有队列中。

列出服务器中所有exchanges:

sudo rabbitmqctl list_exchanges
临时队列(temporary queues)

给queue命名是很关键的。因为我们需要指明消费者到相同的queue.当你需要在生产者和消费者之间共享队列的时候给queue命名是相当重要的。

1.无论何时我们连接RabitMQ服务器的时候需要一个最新的,空的queue。为了达到这个目的,要么创建一个随机命名的queue要么让服务器随机选择一个queue 名字给我们。

2. 一旦我们断开RabitMQ消费者连接,该queue就应该被自动删掉。

绑定(bindings)

当创建了exchange和queue以后,需要告诉exchange发送message到我们的queue。exchange和queue的关系即为binding.

err = ch.QueueBind(
  q.Name, // queue name
  "",     // routing key
  "logs", // exchange
  false,
  nil
)

列出已经存在的binding:

rabbitmqctl list_bindings

如果没有queue与exchange绑定,消息会丢失,如果没有consumer监听我们能安全的丢弃该message.



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值