`
ykdsg
  • 浏览: 17160 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Rabbit Mq 异步消息的使用

 
阅读更多

最近在研究异步的消息机制,使用的是rabbit mq这个消息框架,使用Erlang开发,提供了java的jar包。

内部结构图

AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的。客户端,通常有 Producer 和 Consumer 两种类型。

通常的操作流程是:
(1) 消费者: 创建信息通道。
(2) 消费者: 定义消息队列。
(3) 消费者: 定义特定类型的交换机。
(4) 消费者: 设定绑定规则 (包括交换机名称、队列名称以及路由键)。
(5) 消费者: 等待消息。
(6) 生产者: 创建消息。
(7) 生产者: 将消息投递给信息通道 (注明接收交换机名称和路由键)。
(8) 交换机: 获取消息,依据交换机类型决定是否匹配路由规则 (如需匹配,则对比消息路由键和绑定路由键)。
(9) 消费者: 获取并处理消息,发送反馈。
(10) 结束: 关闭通道和连接。

队列定义参数:
durable: 是否持久,如果是true,则在服务重启之后还是存在,否则不存在
exclusive: 仅创建者可以使用的私有队列,断开后自动删除。(如果为true则只有创建者线程才可以使用,如果线程停止则queue也会自动删除)
auto_delete: 当所有消费客户端连接断开后,是否自动删除队列。

交换机定义参数:
type: 交换机类型,包括 fanout, direct 和 topic。
auto_delete: 当所有绑定队列都不再使用时,是否自动删除该交换机。

交换机类型:
Fanout: 不处理路由键,将消息广播给绑定到该交换机的所有队列。 不论消息的路由关键字是什么,这条消息都会被路由到所有与该交换器绑定的队列中。
广播式交换器类型的工作方式如下:
不使用任何参数将消息队列与交换器绑定在一起。 发布者(直接式交换器类型描述中的producer变成了publisher,已经隐含了二种交换器类型的区别)向交换器发送一条消息。 消息被无条件的传递到所有和这个交换器绑定的消息队列中。

Direct: 处理路由键,对消息路径进行全文匹配。消息路由键 "dog" 只能匹配 "dog" 绑定,不匹配 "dog.puppy" 这类绑定。
通过精确匹配消息的路由关键字,将消息路由到零个或者多个队列中,绑定关键字用来将队列和交换器绑定到一起。这让我们可以构建经典的点对点队列消息传输模型,不过和任何已定义的交换器类型一样,当消息的路由关键字与多个绑定关键字匹配时,消息可能会被发送到多个队列中。

Topic: 处理路由键,按模式匹配路由键。模式符号 "#" 表示一个或多个单词,"*" 仅匹配一个单词。如 "audit.#" 可匹配 "audit.irs.corporate",但 "audit.*" 只匹配 "audit.irs"。
主题式交换器类型提供了这样的路由机制:通过消息的路由关键字和绑定关键字的模式匹配,将消息路由到被绑定的队列中。这种路由器类型可以被用来支持经典的发布/订阅消息传输模型——使用主题名字空间作为消息寻址模式,将消息传递给那些部分或者全部匹配主题模式的多个消费者。
主题交换器类型的工作方式如下:
绑定关键字用零个或多个标记构成,每一个标记之间用“.”字符分隔。绑定关键字必须用这种形式明确说明,并支持通配符:“*”匹配一个词组,“#”零个或多个词组。
因此绑定关键字“*.stock.#”匹配路由关键字“usd.stock”和“eur.stock.db”,但是不匹配“stock.nasdaq”。
这种交换器类型是可选的。

生产者无需定义队列、交换机和绑定,只需将消息投递给信息通道即可。

如果定义一durable的queue,那么bind此queue的exchange也必须是durable的


定义用户权限
set_permissions [-p vhostpath] [-s scope] {user} {conf} {write} {read}

vhostpath
The name of the virtual host to which to grant the user access, defaulting to /.

scope
Scope of the permissions: either client (the default) or all. This determines whether permissions are checked for server-generated resource names (all) or only for client-specified resource names (client).

user
The name of the user to grant access to the specified virtual host.

conf
A regular expression matching resource names for which the user is granted configure permissions.

write
A regular expression matching resource names for which the user is granted write permissions.

read
A regular expression matching resource names for which the user is granted read permissions.

Sets user permissions.

For example:

rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*"This command instructs the RabbitMQ broker to grant the user named tonyg access to the virtual host called /myvhost, with configure permissions on all resources whose names starts with "tonyg-", and write and read permissions on all resources.

spring AMQP 中的SimpleMessageListenerContainer 是spring封装好了的,有一系列bean初始化的动作包含在内,目前的用例中因为需要通过程序动态置入queue就直接调用start方法,看了下spring的源码,他是在bean初始化的时候调用的。

目前关于rabbit mq的中文教程很少,刚接触的时候只是看官方上的文档,和官方提供的示例。因为是用Spring-amqp来做的,所以基本上看spring-amqp的时间多一点,提供了一个简单的hello world和复杂的stock例子,先结合api看hello world的例子,再看spring amqp的reference 感觉就可以入门了,当然之前对amqp的概念要熟悉。感觉rabbit的文档真是比较少特别是java的接口方面,花了很多时间死啃那些文档。

分享到:
评论

相关推荐

    rabbit_mq的demo

    标题中的"rabbit_mq的demo"指的是一个关于如何使用RabbitMQ的示例项目,这个项目旨在展示如何连接到RabbitMQ服务器,发送消息以及接收消息的基本流程。下面我们将深入探讨RabbitMQ的核心概念和操作步骤。 1. **...

    rabbit mq入门例子

    RabbitMQ是一个开源的...总的来说,RabbitMQ是一个强大的消息中间件,它允许应用程序之间异步通信,提高了系统的可伸缩性和可靠性。通过学习和掌握RabbitMQ的基本用法,我们可以构建出高效、稳定、解耦的分布式系统。

    Rabbit MQ.zip

    本压缩包"Rabbit MQ.zip"提供了RabbitMQ的安装教程和必要的安装文件,帮助用户在Windows操作系统上顺利部署。 首先,我们来看"RabbitMQ安装步骤.docx",这是作者提供的详细安装指南。安装RabbitMQ分为几个关键步骤...

    rabbit mq的demo更新

    RabbitMQ是一个开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中,用于解耦组件之间的通信,提供可靠的消息传递和异步处理能力。在这个“rabbit mq的demo更新”...

    Rabbit MQ.ppt

    **RabbitMQ 知识点详解** ...在设计系统时,我们需要权衡这些利弊,合理地使用消息队列来优化系统架构。为克服潜在问题,我们可以采取冗余、备份、监控和故障恢复策略,确保系统整体的稳定性和可靠性。

    2020年初最新版Rabbit MQ 和 Erlang.rar

    在安装"Rabbit MQ Server 3.7.24 + Erlang OTP 22.1 for Windows X64"时,需要注意以下几点: 1. 首先,安装Erlang环境,确保版本与RabbitMQ兼容。 2. 安装RabbitMQ Server,配置好环境变量以便于命令行操作。 3. ...

    ssm-rabbit-mq-发送消息-接收消息

    RabbitMQ是一个开源的消息代理和队列服务器,它允许应用程序之间通过异步处理进行解耦。在本教程中,我们将深入探讨如何在SSM项目中配置和使用RabbitMQ来发送和接收消息。 首先,我们需要安装RabbitMQ。安装文件...

    尚硅谷_消息中间件RabbitMQ_课件.docx

    - **异步处理**:允许系统异步处理消息,从而提高响应速度和处理效率。 - **冗余存储**:MQ可以作为消息的备份存储,确保即使某个服务出现故障也不会丢失重要的业务数据。 #### 二、常见消息中间件介绍 **2.1 ...

    Rabbit MQ整体搭建以及demo.rar

    RabbitMQ作为消息中间件,提供了可靠的异步通信机制,可以用于解耦分布式系统中的组件。本文涵盖了从安装、配置到使用的基本步骤,并提供了一个简单的示例,希望对您的学习有所帮助。在实际项目中,您可能需要探索更...

    rabbit-mq-provider.zip

    在IT行业中,消息队列(Message Queue)是一种用于应用程序间异步通信的重要工具,而RabbitMQ是一款广泛使用的开源消息代理软件,它基于AMQP(Advanced Message Queuing Protocol)。本项目"rabbit-mq-provider.zip...

    rabbit_mq_client

    在项目"rabbit_mq_client"中,这些核心概念和API被用于实现C++客户端,以高效地与RabbitMQ服务器进行通信。这个客户端可以帮助开发者构建基于消息队列的系统,提高系统的可靠性和可扩展性。通过阅读和理解项目的源...

    rabbitmq消息队列

    在信息技术领域,消息队列(MQ)是一种重要的中间件,它在分布式系统中起到桥梁的作用,允许不同组件之间异步通信。RabbitMQ,作为MQ的一种实现,是目前广泛应用的消息代理和队列服务器,它基于开放标准AMQP...

    Custom-message-queue-ajax-httpClient:消息队列,使用环形队列,异步发送httpClient,在并发量不是很大的情况下可以不使用服务器去部署消息队列例如Rabbit MQ

    Custom-message-queue-ajax-httpClient 消息队列,使用环形队列,异步发送httpClient,在并发量不是很大的情况下可以不使用服务器去部署消息队列例如Rabbit MQ

    mq.rar springcloud整合rabbit java工程

    mq.rar springcloud对接rabbit java工程 RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将要发送的消息放入到队列池中。接收端可以根据RabbitMQ配置的转发机制接收服务端发来的消息。 RabbitMQ...

    rabbitmq安装

    RabbitMQ,作为一款广泛使用的开源消息队列系统,是基于AMQP(Advanced Message Queuing Protocol)协议的实现。它允许不同应用程序之间通过发送和接收消息进行通信,从而实现异步处理、解耦组件以及负载均衡等功能...

    rabbit-mq离线安装包.rar

    RabbitMQ是一款开源的消息队列系统,主要用于处理异步任务和分布式系统中的消息传递。它基于AMQP(Advanced Message Queuing Protocol)协议,提供高可用性、可扩展性和可靠性的消息中间件服务。在Linux环境下,离线...

    rabbitmq 消息队列

    RabbitMQ,作为一款广泛使用的开源消息队列系统,是实现应用程序间异步通信和解耦的重要工具。消息队列(MQ)的概念源于分布式系统中的设计模式,它允许不同组件之间通过消息传递进行通信,而无需直接调用或依赖对方...

    java基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码.zip

    基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。...基于SpringBoot+Rabbit

    rabbit mq windows64rabbitmq-server-3.12.4.exe otp-win64-26.0.ex

    RabbitMQ是一款基于AMQP(Advanced Message Queuing Protocol)协议的开源消息中间件,它允许应用程序之间进行异步通信,增强了系统的可扩展性和可靠性。在本案例中,我们讨论的是RabbitMQ的Windows 64位版本,即...

    RabbitMq与Spring整合实例

    将RabbitMQ与Spring整合,可以方便地在Spring应用中使用消息队列,实现异步通信和任务调度。 本实例主要介绍如何在Spring应用中集成RabbitMQ,构建一个完整的消息传递系统。首先,你需要确保已经安装了RabbitMQ...

Global site tag (gtag.js) - Google Analytics