exchange

spring整合RabbitMQ

喜你入骨 提交于 2019-12-09 20:56:53
今天就来康康spring怎么整合RabbitMQ    注意一点,在发送消息的时候对template进行配置mandatory=true保证监听有效   生产端还可以配置其他属性,比如发送重试,超时时间、次数、间隔等 消费端核心配置 首先配置手工确认模式,用于ACK的手工处理,这样我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列、根据业务记录日志等处理 可以设置消费端的监听个数和最大个数,用于控制消费端的并发情况 @RabbitListener注解的使用 消费端监听@RabbitListener注解,这个对于在实际工作中非常的好用 @RabbitListener是一个组合注解,里面可以注 解配置(@QueueBinding、@Queue、@Exchange)直接通过这个组合注解一次性搞定消费端交换机、队列、绑定、路由、并且配置监听功能等 注:由于类配置写在代码里非常不友好,所以强烈建议大家使用配置文件配置 创建一个 rabbitmq-common通用模板项目 放公用实体类 package com.javaxh.rabbitmqcommon.entity; import java.io.Serializable; public class Order implements Serializable { private String id; private

RabbitMQ整合 SpringCloud实战

早过忘川 提交于 2019-12-09 19:44:04
RabbitMQ整合 SpringCloud实战 注意一点,在发送消息的时候对template进行配置mandatory=true保证监听有效 生产端还可以配置其他属性,比如发送重试,超时时间、次数、间隔等 消费端核心配置 首先配置手工确认模式,用于ACK的手工处理,这样我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列、根据业务记录日志等处理 可以设置消费端的监听个数和最大个数,用于控制消费端的并发情况 @RabbitListener注解的使用 消费端监听@RabbitListener注解,这个对于在实际工作中非常的好用 @RabbitListener是一个组合注解,里面可以注解配置(@QueueBinding、@Queue、@Exchange)直接通过这个组合注解一次性搞定消费端交换机、队列、绑定、路由、并且配置监听功能等 注:由于类配置写在代码里非常不友好,所以强烈建议大家使用配置文件配置 相关代码 公共模块:rabbitmq-common子项目 package com.tang.rabbitmqcommon.entity; import java.io.Serializable; public class Order implements Serializable { private String id; private String name;

RabbitMQ学习之:(三)AMQP和RabbitMQ介绍

丶灬走出姿态 提交于 2019-12-07 15:28:21
准备开始 高级消息队列协议(AMQP 1 )是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS 2 ),AMQP客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器 3 和客户端可以投入使用 4 。 AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件(MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。 本文中区别发布/订阅是为了将生产者和消费者拆分开来: 生产者无需知道消费者按照什么标准接受消息 。队列是一个先入先出的数据结构。路由封装了消息队列中的消息的相关信息,这些信息决定了消息在异步消息系统中的最终展现形式。 在这里,我尝试解释一下这个模型的一些概念,Aman Gupta使用Ruby 5 实现了AMQP模型 6 。它使用的是一种事件驱动架构(基于EventMachine 7 ),在阅读和使用的时候都会让人觉得有些不太熟悉

RabbitMQ之消息模式2

≡放荡痞女 提交于 2019-12-07 11:54:28
消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们 单个客户端无法同时处理这么多数据 ! 消费端限流RabbitMQ 提供的解决方案 RabbitMQ提供了一种qos(服务质量保证)功能,即在 非自动确认消息 的前提下,如果一定数目的消息(通过基于Consumer或者Channel设置Qos的值)未被确认前,不进行消费新的消息 Void BasicQos(uint prefetchSize, ushort prefetchCount, bool global); prefetchSize:0 不限制消息大小 prefetchSize:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该Consumer将block(阻塞)掉,直到有消息ack Global:true\false是否将上面设置应用于Channel;简单来说,就是上面限制是Channel级别的还是Consumer级别 注意: prefetchSize 和global 这两项,RabbitMQ 没有实现,暂且不研究; prefetch_count 在no_ask=false 的情况下生效,即在自动应答的情况下,这两个值是不生效的; 自定义消费端代码

RabbitMQ消息模式02

…衆ロ難τιáo~ 提交于 2019-12-07 11:36:27
消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据! 消费端限流RabbitMQ 提供的解决方案 RabbitMQ提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于Consumer或者Channel设置Qos的值)未被确认前,不进行消费新的消息 Void BasicQos(uint prefetchSize, ushort prefetchCount, bool global); prefetchSize:0 不限制消息大小 prefetchSize:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该Consumer将block(阻塞)掉,直到有消息ack Global:true\false是否将上面设置应用于Channel;简单来说,就是上面限制是Channel级别的还是Consumer级别 注意: prefetchSize 和global 这两项,RabbitMQ 没有实现,暂且不研究; prefetch_count 在no_ask=false 的情况下生效,即在自动应答的情况下,这两个值是不生效的; 自定义消费端代码

RabbitMQ消息模式2

旧巷老猫 提交于 2019-12-07 10:47:27
1、消费端限流 2、消息的ACK与重回队列 3、TTL消息 4、死信队列 消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据! 消费端限流 RabbitMQ提供的解决方案 RabbitMQ提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于Consumer或者Channel设置Qos的值)未被确认前,不进行消费新的消息 Void BasicQos(uint prefetchSize, ushort prefetchCount, bool global); prefetchSize:0 不限制消息大小 prefetchSize:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该Consumer将block(阻塞)掉,直到有消息ack Global:true\false是否将上面设置应用于Channel;简单来说,就是上面限制是Channel级别的还是Consumer级别 注意: prefetchSize和global这两项,RabbitMQ没有实现,暂且不研究; prefetch_count在no_ask=false的情况下生效

rabbitMQ交换机的发布订阅模式

筅森魡賤 提交于 2019-12-07 00:12:29
生产者: # !/usr/bin/env python # -*- coding: utf-8 -*- import pika # 创建连接对象 connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() # 创建交换机 channel.exchange_declare(exchange='logs', exchange_type='fanout') # 往队列里插入数据 channel.basic_publish(exchange='logs', routing_key='', body="I don't know") connection.close()    消费者: # !/usr/bin/env python # -*- coding: utf-8 -*- import pika # 创建连接对象 connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() # 创建交换机 channel.exchange_declare(exchange=

RabbitMQ基础概念详细介绍

蹲街弑〆低调 提交于 2019-12-06 22:52:19
转至: http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。 消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如: Python 、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好RabbitMQ的基础。

RabbitMQ基础知识详解

送分小仙女□ 提交于 2019-12-06 22:51:02
什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。 RabbitMQ是MQ的一种。下面详细介绍一下RabbitMQ的基本概念。 1、队列、生产者、消费者 队列是RabbitMQ的内部对象,用于存储消息。生产者(下图中的P)生产消息并投递到队列中,消费者(下图中的C)可以从队列中获取消息并消费。 多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。 2、Exchange、Binding 刚才我们看到生产者将消息投递到队列中,实际上这在RabbitMQ中这种事情永远都不会发生。实际的情况是,生产者将消息发送到Exchange(交换器,下图中的X),再通过Binding将Exchange与Queue关联起来。 3、Exchange Type、Bingding key、routing key 在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key。在绑定多个Queue到同一个Exchange的时候,这些Binding允许使用相同的binding key。 生产者在将消息发送给Exchange的时候,一般会指定一个routing

rabbitmq基础知识

北战南征 提交于 2019-12-06 22:50:40
背景: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。   RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。其实VMWare,Pivotal和EMC本质上是一家的。不同的是VMWare是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。 工作原理: 组成部分说明如下: Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。 Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。 Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。 Producer:消息生产者,即生产方客户端