rabbitmq

package
v0.0.0-...-2d343b4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 9, 2022 License: MIT Imports: 11 Imported by: 0

README

RabbitMQ

AMQP基础概念

  • 即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计;
  • AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
  • RabbitMQ 是一个开源的 AMQP 实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、PHP等。
Producer(生产者)

消息生产者。

从安全角度考虑,网络是不可靠的,接收消息的应用也有可能在处理消息的时候失败。基于此原因,AMQP模块包含了一个消息确认(message acknowledgements)的概念:当一个消息从队列中投递给消费者后(Consumer),消费者会通知一下消息代理(Broker),这个可以是自动的,也可以由处理消息的应用的开发者执行。当“消息确认”被启用的时候,消息代理不会完全将消息从队列中删除,直到它收到来自消费者的确认回执(acknowledgement)。

Consumer(消费者)

消息消费者。

Connection(连接)

一个网络连接,比如TCP/IP套接字连接。Channel是建立在Connection之上的,一个Connection可以建立多个Channel。

Channel(信道)

信道是多路复用连接中的一条独立的双向数据流通道,为会话提供物理传输介质。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。在客户端的每个连接里,可建立多个Channel,每个Channel代表一个会话任务。

Broker(消息代理)

其实Broker就是接收和分发消息的应用,也就是说RabbitMQ Server就是Message Broker。

Vhost(虚拟主机)

虚拟主机,,一批交换器(Exchange),消息队列(Queue)和相关对象。虚拟主机是共享相同身份认证和加密环境的独立服务器域。同时一个Broker里可以开设多个vhost,用作不同用户的权限分离。

Exchange(交换机)

在RabbitMQ中,生产者将消息发送到Exchange,而不是队列(Queue)之中。消息是由Exchange路由到一个或多个队列之中,如果路由不到,或返回给生产者、或直接丢弃。

交换机的类型

Exchange有4种类型对应4种不同的路由策略:

1. Fanout(扇型交换机)

针对队列的广播,它会忽略BindingKey,将所有发送到该Exchange的消息路由到所有与该Exchange绑定的队列中。

2. Direct(直连交换机)

它会将消息路由到那些RoutingKey和BindingKey完全一样的队列中。

3. Topic(主题交换机)

与direct类似,只不过不要求RoutingKey和BindingKey完全一致,可以模糊匹配。

4. Headers(头交换机)

根据消息内容中的headers属性进行匹配,很少用。

交换机的状态

交换机可以有两个状态:

  • 持久(durable)
  • 暂存(transient)
交换机的属性
  • Name
  • Durability (消息代理重启后,交换机是否还存在)
  • Auto-delete (当所有与之绑定的消息队列都完成了对此交换机的使用后,删掉它)
  • Arguments(依赖代理本身)
Queue(消息队列)

是 RabbitMQ 的内部对象,用于存储消息。每个消息都会被投入到一个或多个队列。且多个消费者可以订阅同一个 Queue(这时 Queue 中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理)。

属性
  • Name
  • Durable(消息代理重启后,队列依旧存在)
  • Exclusive(只被一个连接(connection)使用,而且当连接关闭后队列即被删除)
  • Auto-delete(当最后一个消费者退订后即被删除)
  • Arguments(一些消息代理用他来完成类似与TTL的某些额外功能)
Binding(绑定)

它的作用就是把Exchange(Exchange)和队列(Queue)关联起来,在绑定的时候一般会指定一个BindingKey。

Routing Key(路由键)

生产者将消息发送给Exchange时,一般会指定一个RoutingKey,Exchange会根据这个值选择一些路由规则。

Binding Key(绑定键)

指定当前 Exchange(交换机)下,什么样的 Routing Key(路由键)会被下派到当前绑定的 Queue 中。

Documentation

Overview

Package rabbitmq provides a RabbitMQ common

Index

Constants

This section is empty.

Variables

View Source
var (
	DefaultExchange = Exchange{
		Name: "amq.topic",
	}
	DefaultRabbitURL      = "amqp://guest:guest@127.0.0.1:5672"
	DefaultPrefetchCount  = 0
	DefaultPrefetchGlobal = false
	DefaultRequeueOnError = false
)

Functions

func AckOnSuccess

func AckOnSuccess() broker.SubscribeOption

func AckOnSuccessFromContext

func AckOnSuccessFromContext(ctx context.Context) (bool, bool)

func AppID

func AppID(value string) broker.PublishOption

func ContentEncoding

func ContentEncoding(value string) broker.PublishOption

func ContentType

func ContentType(value string) broker.PublishOption

func CorrelationID

func CorrelationID(value string) broker.PublishOption

func DeliveryMode

func DeliveryMode(value uint8) broker.PublishOption

func DurableExchange

func DurableExchange() broker.Option

func DurableQueue

func DurableQueue() broker.SubscribeOption

func ExchangeName

func ExchangeName(e string) broker.Option

func Expiration

func Expiration(value string) broker.PublishOption

func ExternalAuth

func ExternalAuth() broker.Option

func Headers

func Headers(h map[string]interface{}) broker.SubscribeOption

func MessageId

func MessageId(value string) broker.PublishOption

func NewBroker

func NewBroker(opts ...broker.Option) broker.Broker

func PrefetchCount

func PrefetchCount(c int) broker.Option

func PrefetchGlobal

func PrefetchGlobal() broker.Option

func Priority

func Priority(value uint8) broker.PublishOption

func QueueArguments

func QueueArguments(h map[string]interface{}) broker.SubscribeOption

func ReplyTo

func ReplyTo(value string) broker.PublishOption

func RequeueOnError

func RequeueOnError() broker.SubscribeOption

func SubscribeContext

func SubscribeContext(ctx context.Context) broker.SubscribeOption

func SubscribeContextFromContext

func SubscribeContextFromContext(ctx context.Context) (context.Context, bool)

func Timestamp

func Timestamp(value time.Time) broker.PublishOption

func TypeMsg

func TypeMsg(value string) broker.PublishOption

func UserID

func UserID(value string) broker.PublishOption

Types

type Exchange

type Exchange struct {
	Name    string
	Durable bool
}

type ExternalAuthentication

type ExternalAuthentication struct {
}

func (*ExternalAuthentication) Mechanism

func (auth *ExternalAuthentication) Mechanism() string

func (*ExternalAuthentication) Response

func (auth *ExternalAuthentication) Response() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL