GO消息队列——rabbitmq

84 篇文章 3 订阅
31 篇文章 0 订阅
本文介绍了RabbitMQ在流量削峰和异步处理中的应用,并展示了如何通过Docker快速部署RabbitMQ实例。接着,利用Go语言编写了发送和接收消息的示例代码,详细解释了连接、发布和消费消息的过程。
摘要由CSDN通过智能技术生成

Rabbitmq应用场景

  • 流量削峰,当大流量访问时,可以将服务进行排队,对大流量削峰
  • 异步,可以将用户的操作排入队列,先行返回,再进行后台操作。

先安装rabbitmq环境,我为了方便,使用docker启动rabbitmq。
拉取镜像

docker pull rabbitmq

创建实例

docker run -p 5672:5672 --rm rabbitmq

rabbitmq使用的端口号是5672所以将5672端口映射到主机,也可以使用host模式。

现在使用go连接rabbitmq,进行传输消息。

发送端

package main

import (
	"encoding/json"
	//"fmt"
	"github.com/streadway/amqp"
	"log"
	"time"
)
type User struct {
	Name string
	Sex int
}
func main () {
//连接服务器
	con , err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	fallerror(err)
	//创建管道
	ch , err := con.Channel()
	fallerror(err)
	//在管道中声明队列,一个管道对应多个队列
	qu , err := ch.QueueDeclare("world" , false , false , false , false , nil)
	fallerror(err)
	f := User{
		Name: "xiang",
		Sex: 1,
	}
	for {
	//不断地将消息推送到消息队列中
		err = ch.Publish("" , qu.Name , false , false , amqp.Publishing{Body: t(f) , ContentType: "text/plain"})
		time.Sleep(time.Second)
	}
	fallerror(err)

}

func fallerror (err error) {
	if err != nil {
		log.Println(err)
	}
}


func t (msg interface{}) (mbyte []byte){
	mbyte , _ = json.Marshal(msg)
	return
}

接收端

package main

import (
	"encoding/json"
	"fmt"
	"github.com/streadway/amqp"
	"log"
)
type U struct {
	Name string
	Sex int
}
func main () {
//连接服务器
	con , err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	fall(err)
	//声明管道
	ch , err := con.Channel()
	fall(err)
	//在管道中创建队列,注意队列的名称要与发送的队列的名称相同。
	q , err := ch.QueueDeclare("world" , false , false , false , false , nil)
	fall(err)
	//消费队列的消息
	msg , err := ch.Consume(q.Name , "" , true , false , false , false , nil)
	fall(err)
	for d :=range msg{
		var y U
		json.Unmarshal(d.Body , &y)
		fmt.Println(y)
	}
}


func fall (err error) {
	if err != nil {
		log.Println(err)
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值