golang使用rabbitmq(四)路由功能

栏目: Go · 发布时间: 6年前

内容简介:上一章我们讲的是一个简单的日志系统,把日志广播到每一个接受者。在这一章增加一点功能,为了节省磁盘,只有告警日志和错误日志才进行存储,其他日志就打印到控制台就可以了。上一章我们也讲过绑定,绑定是让队列和交换器之间的关系。通俗点说就是让队列只对它所绑定的交换器中的信息感兴趣。绑定时的key和交换器类型有关系,如果在fanout交换器中这个值就会被忽略,而在direct交换器中的作用要看下面的内容。

上一章我们讲的是一个简单的日志系统,把日志广播到每一个接受者。在这一章增加一点功能,为了节省磁盘,只有告警日志和错误日志才进行存储,其他日志就打印到控制台就可以了。

上一章我们也讲过绑定,绑定是让队列和交换器之间的关系。通俗点说就是让队列只对它所绑定的交换器中的信息感兴趣。

for _, key := range os.Args[1:] {
		log.Printf("Binding queue %s to exchange %s with routing key %s",
			q.Name, "logs_direct", key)
		err = ch.QueueBind(q.Name, key, "logs_direct", false, nil)
		failOnError(err, "Failed to bind a queue")
	}

绑定时的key和交换器类型有关系,如果在fanout交换器中这个值就会被忽略,而在direct交换器中的作用要看下面的内容。

Direct交换器

我们上一篇的日志系统,会把日志发送到所有的消费者。现在扩展以下,把警告和错误日志才存储到文件中,而普通信息打印到控制台即可。

fanout交换器就做不到这么灵活了,这时候就需要direct交换器。direct交换器也很简单就是把发送时带有 routing key 的消息发送到通过 binding key 绑定到交换器的队列中,这两个值要相同才可以发送。

相同 binding key 值可以绑定多个队列,一个队列也可以通过多个 binding key 值绑定

分发日志

首先创建direct交换器

err = ch.ExchangeDeclare("logs_direct", amqp.ExchangeDirect, true, false, false, false, nil)
	failOnError(err, "Failed to declare an exchange")

然后往交换器里发送信息

body := bodyFrom(os.Args)
	err = ch.Publish("logs_direct", severityFrom(os.Args), false, false, amqp.Publishing{
		DeliveryMode: amqp.Persistent,
		ContentType:  "text/plain",
		Body:         []byte(body),
	})
	failOnError(err, "Failed to publish a message")

现在进行订阅

q, err := ch.QueueDeclare("", false, false, true, false, nil)
	failOnError(err, "Failed to declare a queue")

	if len(os.Args) < 2 {
		log.Printf("Usage: %s [info] [warning] [error]", os.Args[0])
		os.Exit(0)
	}

	for _, key := range os.Args[1:] {
		log.Printf("Binding queue %s to exchange %s with routing key %s",
			q.Name, "logs_direct", key)
		err = ch.QueueBind(q.Name, key, "logs_direct", false, nil)
		failOnError(err, "Failed to bind a queue")
	}

	msgs, err := ch.Consume(q.Name, "", true, false, false, false, nil)
	failOnError(err, "Failed to register a consumer")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Netty实战

Netty实战

诺曼·毛瑞尔(Norman Maurer)、马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal) / 何品 / 人民邮电出版社 / 2017-5-1 / 69.00

编辑推荐 - Netty之父”Trustin Lee作序推荐 - 阿里巴巴中间件高级技术专家为本书中文版作序推荐 - 系统而详细地介绍了Netty的各个方面并附带了即用型的优质示例 - 附带行业一线公司的案例研究 - 极实用的Netty技术书 无论是构建高性能的Web、游戏服务器、推送系统、RPC框架、消息中间件还是分布式大数据处理引擎,都离不开Nett......一起来看看 《Netty实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具