Rabbitmq go语言简单案例

这里使用的操作系统为ubuntu,首先安装rabbitmq,命令终端输入:

sudo apt-get install rabbitmq-server

下载mq管理工具rabbitmqadmin,输入:

sudo rabbitmq-plugins enable rabbitmq_management

wget localhost:15672/cli/rabbitmqadmin

这样我们就可以通过管理工具来管理Rabbitmq,浏览器中输入:localhost:15672,输入默认的用户名密码:guest,guest,管理界面如下:

Overview:RabbitMQ概述

Connections:MQ的连接信息

Channels:MQ的通道信息

Exchanges:MQ的交换器信息,默认情况下MQ会自动创建几个持久性的交换器。

Queues:MQ的队列信息

Admin:用户信息

这里,我们先创建一个测试用户,用来测试RabbitMQ的连接。

终端输入以下命令:

添加用户test,秘密test

sudo rabbitmqctl add_user test test

设置用户为管理员用户

sudo rabbitmqctl set_user_tags test administrator

给test用户添加访问所有exchange权限

sudo rabbitmqctl set_permissions -p / test “.*” “.*” “.*”

这时候我们通过管理页面可以看到已经创建成功,如下:

当然,这里也可以通过点击“Add user”来添加用户。

接下来,我们就可以编写rabbitmq代码了,先使用代码实现rabbitmq生成者发现发送消息功能。

package main

import (
	"github.com/streadway/amqp"
)

var conn *amqp.Connection
var ch *amqp.Channel

func main() {
	//设置连接地址和交换器队列名称
	addr := "amqp://test:test@192.168.1.104:5672/"
	exname := "amqp.ex"
	quname := "amqp.qu"

	//创建连接
	conn, _ = amqp.Dial(addr)
	//创建通道,注意,一个连接可以有多个通道
	ch, _ = conn.Channel()
	//创建一个交换器,参数fanout说明该交换器会将消息转发到所有与之绑定的队列中
	ch.ExchangeDeclare(exname, "fanout", true, false, false, true, nil)
	//创建一个队列,用来接受和消费信息,注意这里的队列名称,消费者获取数据需要该名称
	ch.QueueDeclare(quname, true, false, false, false, nil)
	//绑定交换器和队列
	ch.QueueBind(quname, "", exname, false, nil)
	//发送消息
	ch.Publish(exname, quname, false, false, amqp.Publishing{
		ContentType: "text/plain",
		Body:        []byte("hello,world"),
	})
	//关闭连接
	conn.Close()
	ch.Close()

	select {}
}

 

交换器创建的参数说明如下:

name:交换器的名称,对应图中exchangeName。

kind:也叫作type,表示交换器的类型。有四种常用类型:direct、fanout、topic、headers。

durable:是否持久化,true表示是。持久化表示会把交换器的配置存盘,当RMQ Server重启后,会自动加载交换器。

autoDelete:是否自动删除,true表示是。至少有一条绑定才可以触发自动删除,当所有绑定都与交换器解绑后,会自动删除此交换器。

internal:是否为内部,true表示是。客户端无法直接发送msg到内部交换器,只有交换器可以发送msg到内部交换器。

noWait:是否非阻塞,true表示是。阻塞:表示创建交换器的请求发送后,阻塞等待RMQ Server返回信息。非阻塞:不会阻塞等待RMQ Server的返回信息,而RMQ Server也不会返回信息。(不推荐使用)

args:参数可选,如果有特殊参数需要传递,可以使用该参数。

消费者实现代码如下:

package main

import (
	"bytes"
	"fmt"
	"github.com/streadway/amqp"
)

var conn *amqp.Connection
var ch *amqp.Channel

func main() {
	addr := "amqp://test:test@192.168.1.104:5672/"
	quname := "amqp.qu"
	conn, _ = amqp.Dial(addr)
	ch, _ = conn.Channel()

	//接受消息
	value, _ := ch.Consume(quname, "", true, false, false, false, nil)
	go func() {
		for v := range value {
			s := bytesToString(&(v.Body))
			fmt.Println(*s)
		}
	}()

	conn.Close()
	ch.Close()

	select {}
}

func bytesToString(b *[]byte) *string {
	s := bytes.NewBuffer(*b)
	r := s.String()
	return &r

}

运行程序,消费者输出 hello,world,运行成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值