RabbitMQ
是一个消息代理商,它负责接收和传递消息,就像一个邮局,你寄信要通过邮局,邮局会接收你的信并将信传送给收件人。由Erlang语言实现,使用AMQP协议。所谓AMQP,即Advanced Message Queuing Protocol,就是一个提供统一消息服务的应用层标准高级消息队列协议。
安装:
官方提供了多种安装方式 :http://www.rabbitmq.com/download.html
笔者环境MacOS, 使用了homebrew的安装方式,详情见:http://www.rabbitmq.com/install-homebrew.html
P : producer 消息生产者
Q :queue消息队列,在RabbitMQ和应用中传递的消息被存在消息队列中,消息队列是一个非常大的消息池,其大小受限于服务的内存和硬盘的大小。多个P可以发送消息到这个消息队列中,很多消费者也可以从这个消息队列中获取消息。
C :consumer 消息消费者,也是消息接收者。一个消费者会一直等待接收消息。
使用go语言开发实现生产和消费消息
首先,安装依赖包,(提醒笔者自己使用godep save):
go get github.com/streadway/amqp
接下来,发送消息,发布者需要连接Rabbit MQ,发送一个消息,并退出:
首先,引入包依赖:
还有一个帮助方法,用来检查错误:
接下来开始正式的使用RabbitMQ了。
先要连接RabbitMQ Server:
amp.Dial(url string) (*Connection, error) 方法中,url是一个符合AMQP URI格式的字符串,amqp://userName:password@serverhost:port/ , 通过url中的userName、password进行权限验证,返回一个TCP连接。当然,还有更多连接方法。
获取一个信道:
接下来可以发送消息,发送消息前先声明一个队列,如果队列已存在,则直接使用,并且将消息传入这个队列,消息体是byte类型:
热乎乎的源码在这儿:
https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/go/send.go
有了发送就要有接收啊,同样引入包、failOnError方法,也需要打开一个连接和信道,并且要声明一个队列,毕竟你还要从这个队列中取消息。此处代码基本同上文,省略。
万事俱备,只需要消费啦!
我们可以从这个队列中取消息啦,现实场景下,更多的是异步处理消息,此处使用goroutine读取消息:
好饭不怕晚,源码在这儿:https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/go/receive.go
接下来,先运行 go run send.go,发送消息,
再运行 go run receive.go,你会发现,消息被接收到啦!
在终端运行命令行 rabbitmqctl list_queues,可以看到hello队列了:
其实,上述只是牛刀小试,更复杂的还在后面,笔者只是总结了一下,有不足之处欢迎指出!
严重参考:
http://www.rabbitmq.com/tutorials/tutorial-one-go.html
有疑问加站长微信联系(非本文作者)