概述

rabbit是比较流行的MQ中间件之一。

它有部署简单、使用方便、轻量等特性。

在系统资源占用上相对kafka(JAVA)、rockerMQ(JAVA)而言会更加少。

farseer-go/rabbit
配置自动化支持连接池容器化操作
配置

./farseer.yaml

Rabbit:
  - Server: "Server=rabbit1:5672,UserName=farseer,Password=farseer,MinChannelCount=10,MaxChannelCount=100"
    Exchange:
      - "ExchangeName=Ex1,RoutingKey=,ExchangeType=fanout,IsDurable=true,UseConfirmModel=true,AutoCreateExchange=true"
      - "ExchangeName=Ex2,RoutingKey=,ExchangeType=fanout,IsDurable=true,UseConfirmModel=true,AutoCreateExchange=true"
  - Server: "Server=rabbit2:5672,UserName=farseer,Password=farseer,MinChannelCount=10,MaxChannelCount=100"
    Exchange:
      - "ExchangeName=Ex3,RoutingKey=,ExchangeType=fanout,IsDurable=true,UseConfirmModel=true,AutoCreateExchange=true"
      - "ExchangeName=Ex24,RoutingKey=,ExchangeType=fanout,IsDurable=true,UseConfirmModel=true,AutoCreateExchange=true"
复制代码

配置文件支持同时配置多个不同服务端、不同的交换器设置。

配置说明:

ServerUserNamePasswordMinChannelCountMaxChannelCountExchangeNameRoutingKeyExchangeTypeIsDurableAutoDeleteUseConfirmModelAutoCreateExchange
发消息
product := container.Resolve[rabbit.IProduct]("Ex1")
product.SendString("aaaa")
复制代码
container.Resolverabbit.IProduct
Ex1./farseer.yamlExchangeName
AutoCreateExchange=true
SendStringstring类型
rabbit.IProduct
type IProduct interface {
   // SendString 发送消息(使用配置设置)
   SendString(message string) error
   // SendJson 发送消息,将data序列化成json(使用配置设置)
   SendJson(data any) error
   // SendStringKey 发送消息(使用配置设置)
   SendStringKey(message, routingKey string) error
   // SendJsonKey 发送消息(使用配置设置)
   SendJsonKey(data any, routingKey string) error
   // SendMessage 发送消息
   SendMessage(message []byte, routingKey, messageId string, priority uint8) error
}
复制代码
data any
SendMessage
消费
// 注册消费者
consumer := container.Resolve[rabbit.IConsumer]("Ex1")
// 手动ACK
consumer.SubscribeAck("Q1", "", func(message string, ea rabbit.EventArgs) bool {
    return true
})

// 自动ACK
consumer.Subscribe("Q2", "", func(message string, ea rabbit.EventArgs) {
   // doing...
})
复制代码
container.Resolverabbit.IConsumer
Ex1./farseer.yamlExchangeName
consumer.Subscribe
  • 第一个参数:队列名称,如果不存在,则自动创建(示例中的为Q1)
  • 第二个参数:routingKey,路由键
  • 第三个参数:应用系统的逻辑处理实现。
  • message:在队列中推送过来的消息内容。
  • ea:本条消息的属性。
SubscribeAck函数
Subscribe函数

总结

farseer-go/rabbitfarseer-go/rabbit