exchange

RabbitMQ--运行机制

Deadly 提交于 2020-02-07 02:20:00
AMQP中的消息路由 AMQP中消息的路由过程和Java开发者熟悉的JMS存在一些差别,AMQP中增加了 Exchange和Binding 的角色。生产者把消息发布到Exchange上,消息最终到达队列并被消费者接收,而Binding决定交换器的消息应该发送到那个队列。 Exchange类型 Exchange分发消息时根据类型的不同分发策略有区别,目前共有4中类型: direct、fanout、topic、headers 。 headers匹配AMQP消息的header而不是路由键,headers交换器和direct交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三中类型。 Direct Exchange: 消息中的路由键(routing key)如果和Binding中的binding key一致,交换器将消息发到对应的队列中。路由键与队列名完全匹配,如果一个队列绑定到交换机要求路由键为"dog",则只转发routing key 标记为"dog"的消息,不会转发"dog.puppy",也不会转发"dog.guard"等等。它是完全匹配、单播的模式。 Fanout Exchange: 每个发到fanout类型交换器的消息都会分到所有绑定的队列上去。fanout交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上

SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码)

为君一笑 提交于 2020-02-06 18:13:18
一、先扔一张图 说明: 本文涵盖了关于RabbitMQ很多方面的知识点, 如: 消息发送确认机制 消费确认机制 消息的重新投递 消费幂等性, 等等 这些都是围绕上面那张整体流程图展开的, 所以有必要先贴出来, 见图知意 二、实现思路 简略介绍163邮箱授权码的获取 编写发送邮件工具类 编写RabbitMQ配置文件 生产者发起调用 消费者发送邮件 定时任务定时拉取投递失败的消息, 重新投递 各种异常情况的测试验证 拓展: 使用动态代理实现消费端幂等性验证和消息确认(ack) 三、项目介绍 springboot版本2.1.5.RELEASE, 旧版本可能有些配置属性不能使用, 需要以代码形式进行配置 RabbitMQ版本3.7.15 MailUtil: 发送邮件工具类 RabbitConfig: rabbitmq相关配置 TestServiceImpl: 生产者, 发送消息 MailConsumer: 消费者, 消费消息, 发送邮件 ResendMsg: 定时任务, 重新投递发送失败的消息 说明: 上面是核心代码, MsgLogService mapper xml等均未贴出, 完整代码可以参考GitHub上的源码,地址在文末。 四、代码实现 1.163邮箱授权码的获取, 如图: 该授权码就是配置文件spring.mail.password需要的密码 2.pom < ! -- mq --

rabbitMQ--快速入门

自古美人都是妖i 提交于 2020-02-06 02:32:32
1、简介    MQ全称为Message Queue, 消息队列 (MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如 远程过程调用 的技术。      如上图所示:     1.Server(broker): 接受客户端连接,实现 AMQP消息队列和路由功能的进程。   2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host   3.Exchange:接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为,例如,在RabbitMQ中,   ExchangeType有direct、Fanout和Topic三种,不同类型的Exchange路由的行为是不一样的。   4. Message Queue:消息队列,用于存储还未被消费者消费的消息。   5.Message: 由Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化、由哪个Message

springboot集成rabbitmq

余生颓废 提交于 2020-01-30 19:03:18
RabbitMQ简介 RabbitMQ使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现(AMQP的主要特征是面向消息、队列、路由、可靠性、安全)。支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现很出色。 相关概念 消息队列通常有三个概念:发送消息(生产者)、队列、接收消息(消费者)。RabbitMQ在这个基本概念之上,多做了一层抽象,在发送消息和队列之间,加入了交换机。这样发送消息和队列就没有直接关系,而是通过交换机来做转发,交换机会根据分发策略把消息转给队列。 RabbitMQ比较重要的几个概念: 虚拟主机:RabbitMQ支持权限控制,但是最小控制粒度为虚拟主机。一个虚拟主机可以包含多个交换机、队列、绑定。 交换机:RabbitMQ分发器,根据不同的策略将消息分发到相关的队列。 队列:缓存消息的容器。 绑定:设置交换机与队列的关系。 交换机(Exchange) 交换机的主要作用是接收相应的消息并且绑定到指定的队列.交换机有四种类型,分别为Direct,topic,headers,Fanout.   Direct是RabbitMQ默认的交换机模式,也是最简单的模式.即创建消息队列的时候

RabbitMQ入门介绍以及安装使用

点点圈 提交于 2020-01-30 00:14:28
一、RabbitMQ初识 RabbitMQ是一个实现了高级消息队列协议(AMQP的消息代理(也叫消息中间件),它接受并转发消息。它可以帮你处理一些逻辑的事务,从而进行解耦,比如用户注册落库之后,还需要发送邮件验证、需要发送新人红包等等事情,就可以交给中间件去做。也可以把它当成一个邮局:当你想邮寄信件的时候,你会把信件放在投递箱中,并确信邮递员最终会将信件送到收件人的手里。在这个例子中,RabbitMQ就相当与投递箱、邮局和邮递员。 1.1 AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件产品、不同的开发语言等条件的限制。 1.2 典型应用场景 跨系统的异步通信 ,异步、解耦、削峰。 应用内的同步变成异步 秒杀:自己发送给自己 基于Pub/Sub模型实现的事件驱动 ,摒弃ELT(比如全量 同步商户数据); 摒弃API(比如定时增量获取用户、获取产品,变成增量广播)。 利用RabbitMQ实现事务的最终一致性 1.3 RabbitMQ的特性 RabbitMQ使用Erlang语言编写,使用Mnesia数据库存储消息。 可靠性(Reliability) RabbitMQ

OpenStack组建通信机制

独自空忆成欢 提交于 2020-01-29 20:18:21
openstack各项目之间通过restful api进行通信,相同项目内不同组件进程组件之间通过消息总线进行通信。服务进程通过向消息总线上发送和获取消息,openstack是基于消息驱动的。 目前项目内部消息通信采用两种方式实现RPC和事件通知。 1、RPC(remote procedure call)主要包含call和cast两种(call:同步调用;cast:异步接口)。 2、事件通知(event notification) AMQP的架构如图所示 消息的处理分发主要有Exchange(消息交换)和Queue(消息队列)实现。 当producer将消息发送给消息服务器时,由Exchange和消息的routing key决定将消息发送给哪个queue队列,然后consumer在queue拿取自己感兴趣的消息进行处理。 Exchange并不会保存消息,只是对消息进行分发,负责指定消息发送到哪个队列上。 基于AMQP的RPC实现 client发送消息request给exchange,routing key指明到op_queue消息队列,并从res_queue取返回。 Exchange将消息推送到op_queue消息队列 server端从op_queue取出自己需要处理的数据,执行对应的任务,并将执行的响应结果发送给exchange,指明到res_queue

RabbitMQ的特点以及搭建

☆樱花仙子☆ 提交于 2020-01-29 08:38:18
一、消息队列中间件简介 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ 二、消息队列在实际应用中常用的使用场景 异步处理,应用解耦,流量削锋和消息通讯四个场景 三、什么是RabbitMQ RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。 AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放 标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。 RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 四、RabbitMQ的特点 1.可靠性(Reliability) RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。 2.灵活的路由(Flexible Routing) 在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个Exchange 绑定在一起

Haproxy For Exchange 2016

帅比萌擦擦* 提交于 2020-01-27 05:36:42
haproxy.conf 的配置文件 #--------------------------------------------------------------------- # Example configuration for a possible web application . See the # full configuration options online . # # http: / / haproxy . 1 wt . eu / download / 1.4 /doc/configuration.txt # # --------------------------------------------------------------------- # --------------------------------------------------------------------- # Global settings # --------------------------------------------------------------------- global # to have these messages end up in / var / log / haproxy . log you will # need to: # # 1 )

Postfix实现代理Exchange邮件传输方案

我只是一个虾纸丫 提交于 2020-01-25 20:26:21
由于公司Exchange环境的邮件过滤的硬件设备存在单点故障又不想再花更多的费用去做这方面的投资,所以想通过Postfix工具实现一个冗余的方案。 postfix是Wietse Venema在 IBM 的 GPL协议 之下开发的 MTA (邮件传输代理)软件,是linux世界的一个开源的邮件传输代理工具,通过一些组件可以实现反垃圾邮件和防病毒的功能。 相关组件: postfix+clamd+spamassassin+amavisd-new clamd 反病毒引擎 spamassassin 反垃圾邮件 amavisd-new是邮件代理服务器(MTA)和防毒软件之间的中介软件 基本原理: 第一步:postfix 接收邮件 postfix,通过25端口,接受所有的邮件,这个步骤,是很好理解。 第二步:把邮件交给amavisd-new 在Linux的邮件系统里,amavisd-new的非常关键啊。可以这样理解,postfix,的所有额外的功能,都需要通过他才能实现。 从上面的这个图片,我们就可以看到,postfix,把邮件接收下来后,交给amavisd-new,让他想办法,解决杀毒,垃圾邮件过滤的问题。 交给杀毒软件 通过clamd,linux的杀毒软件,检查邮件是否带病毒。 交给SpamAssassin 通过他来实现垃圾邮件的过滤。 第三步:amavisd

RabbitMQ消息分发简单介绍

浪子不回头ぞ 提交于 2020-01-25 13:49:35
通过前面介绍过activemq的文章的时候我们了解到activemq有queue和topic的具体实现,但是在rabbitmq中只有queue的具体实现,是没有具体topic这种说法的,但是虽然没有提供topic的概念,但是却通过交换器exchange、路由routingkey等进行了交换实现,下面我们就来介绍下在rabbitmq中生产者是如何把消息发送到队列中的。 在介绍消息传递之前我们还得介绍下下面的几个概念: vhost:在前面的一篇文章 《RabbitMQ的配置文件说明》 中提到过一个关于vhost的默认配置为default_vhost = /,它代表一个mini的rabbitmq虚拟主机,除了与其他rabbitmq虚拟主机共享相同的身份认证和加密环境外,它拥有自己独立的queue,exchange,routingkey,binding及权限机制,它可以通过命令行rabbitmqctl add_vhost qa1和在管理界面添加 channel:通道,是由connection创建的,而connection又是通过ConnectionFactory创建的,在channel中我们可以定义queue、exchange、queuebind、消息发布、消息消费等操作。 routingkey:路由key,用来路由消息到queue