go语言开发RabbitMQ-牛刀小小试试

lily1110 · · 3095 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3095 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传