exchange

RabbitMQ队列

一个人想着一个人 提交于 2019-12-02 16:42:07
为啥要使用MQ 以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用 MQ ,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到 MQ 让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由 MQ 推送消息),当发现 MQ 中有发红包或发短信之类的消息时,执行相应的业务逻辑。 MQ的介绍 MQ 全称为 Message Queue , 消息队列( MQ )是一种应用程序对应用程序的通信方法。 MQ 是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。 你可以想想在生活中的一种场景:当你把信件的投进邮筒,邮递员肯定最终会将信件送给收件人。我们可以把MQ比作 邮局和邮递员。 MQ和邮局的主要区别是,它不处理消息,但是,它会接受数据、存储消息数据、转发消息 队列,生产者,消费者 队列是RabbitMQ的内部对象,用于存储消息。生产者

RestTemplate使用实战-exchange方法讲解

余生颓废 提交于 2019-12-02 15:13:01
RestTemplate是什么 RestTemple是Spring提供的用于访问Http请求的客户端,RestTemple提供了多种简洁的远程访问服务的方法,省去了很多无用的代码。 为什么要用RestTemplate 相信大家之前都用过apache的HTTPClient类,逻辑繁琐,代码复杂,还要自己编写使用类HttpClientUtil,封装对应的post,get,delete等方法。 RestTemplate的行为可以通过callback回调方法和配置HttpMessageConverter 来定制,用来把对象封装到HTTP请求体,将响应信息放到一个对象中。RestTemplate提供更高等级的符合HTTP的六种主要方法,可以很简单的调用RESTful服务。 RestTemplate实战 一.创建RestTemplate 创建RestTemplate很简单,只需要把RestTemplate注入到bean里面。 @Configuration public class RestTempleConfig { @Bean public RestTemplate restTemplate ( ) { return new RestTemplate ( ) ; } } 当然,也可以通过xml文件配置的方式注入。

RabbitMQ死信队列

泪湿孤枕 提交于 2019-12-02 13:07:57
死信队列 DLX,全称为Dead-Letter Exchange,可以称之为死信交换器,也有人称之为死信邮箱.当消息在一个队列中变成死信(dead message)之后,它能被重新被发送到另一个交换器中,这个交换器就是DLX,绑定DLX的队列就称之为死信队列。 消息变成死信-般是由于以下几种情况: 1.消息被拒绝(basic.reject或basic.nack)并且requeue=false. 2.消息TTL过期【消息由于消息有效期(per-message TTL)过期】 3.队列达到最大长度(队列满了,无法再添加数据到mq中) 消息变成死信后,会被重新投递(publish)到另一个交换机上(Exchange),这个交换机往往被称为DLX(dead-letter-exchange)“死信交换机”,然后交换机根据绑定规则转发到对应的队列上,监听该队列就可以被重新消费。 应用场景分析 在定义业务队列的时候,可以考虑指定一个死信交换机,并绑定一个死信队列,当消息变成死信时,该消息就会被发送到该死信队列上,这样就方便我们查看消息失败的原因了 死信处理过程 死信处理过程 DLX也是一个正常的Exchange,和一般的Exchange没有区别,它能在任何的队列上被指定,实际上就是设置某个队列的属性。 当这个队列中有死信时,RabbitMQ就会自动的将这个消息重新发布到设置的Exchange上去

rabbitMQ基础概念

好久不见. 提交于 2019-12-02 06:51:58
1、RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 2、概念理解 ConnectionFactory、Connection、Channel ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑 ConnectionFactory为Connection的制造工厂。 Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange

见微知著--交换两个变量

我怕爱的太早我们不能终老 提交于 2019-12-02 06:50:46
通过类来实现交换两个变量的值。要求:需要交换实参的值。 public class Exchange { public double num1 ; public double num2 ; public void exchange ( ) { double tmp = num1 ; num1 = num2 ; num2 = tmp ; System . out . println ( "num1 = " + num1 ) ; System . out . println ( "num2 = " + num2 ) ; } } import java . util . Scanner ; public class Test { public static void main ( String [ ] args ) { Exchange exchange = new Exchange ( ) ; Scanner scanner = new Scanner ( System . in ) ; System . out . println ( "请输入要交换的两个数:" ) ; exchange . num1 = scanner . nextDouble ( ) ; exchange . num2 = scanner . nextDouble ( ) ; exchange . exchange

java基础(六):RabbitMQ 入门

老子叫甜甜 提交于 2019-12-02 03:47:29
本片文章续《 Spring Boot 入门(七):集成 swagger2 》,关于RabbitMQ的介绍请参考《 java基础(六):RabbitMQ 入门 》 1.增加依赖 1 <!--rabbitMq--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-amqp</artifactId> 5 </dependency> 2.增加conf 1 2 3 import lombok.extern.slf4j.Slf4j; 4 import org.springframework.amqp.core.*; 5 import org.springframework.amqp.rabbit.connection.CorrelationData; 6 import org.springframework.amqp.rabbit.core.RabbitTemplate; 7 import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback; 8 import org.springframework.amqp.rabbit.core.RabbitTemplate

spring cloud 集成rabbitMQ实现延时队列

佐手、 提交于 2019-12-01 23:00:27
假如环境已经配置好,现在我们有这么个需求,我们把消息发给消息队列后,并不希望马上消费这个消息,而是想等一段时间再让他消费,直接上代码吧: mq配置文件:定义一些队列名称配置 @Configuration public class QueueConfiguration { //信道配置 @Bean public DirectExchange defaultExchange() { return new DirectExchange(MQConstant.DEFAULT_EXCHANGE, true, false); } @Bean public Queue repeatTradeQueue() { Queue queue = new Queue(MQConstant.DEFAULT_REPEAT_TRADE_QUEUE_NAME,true,false,false); return queue; } @Bean public Binding drepeatTradeBinding() { return BindingBuilder.bind(repeatTradeQueue()).to(defaultExchange()).with(MQConstant.DEFAULT_REPEAT_TRADE_QUEUE_NAME); } @Bean public Queue

RabbitMQ

只愿长相守 提交于 2019-12-01 19:03:32
1.介绍 RabbitMQ是一个消息代理 - 一个消息系统的媒介。它的工作就是接收和转发消息。你可以把他想象成一个邮局,你把信件都放到这个邮箱中,邮递员叔叔就会把信件投递到你的收件人处。只是邮箱中放的是你的信件,而我们要使用的RabbitMQ中存放的是我们的二进制数据。 下面是RabbitMQ和消息所涉及到的一些术语。 生产(Producing)的意思就是发送。发送消息的程序就是生产者(producer)。我们一般使用"P"表示。 队列(queue)就是存在于RabbitMQ中邮箱的名称。实质上队列就是一个巨大的消息缓冲区,我们同一时刻能够处理的数据有限,所以就将这些数据按照先后顺序存在这个消息队列中,我们一点点的进行处理。 消费(Consuming)和接收(receiving)是同一个意思。一个消费者(consumer)就是一个等待获取消息的程序。我们把它绘制为"C": 2.消息队列的作用 1)程序解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2)冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。 许多消息队列所采用的"插入-获取-删除"方式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 3)峰值处理能力:

SpringCloud之RabbitMQ安装

◇◆丶佛笑我妖孽 提交于 2019-12-01 10:11:01
  本篇章讲解RabbitMQ的用途、原理以及配置,RabbitMQ的安装请查看 SpringCloud之RabbitMQ安装 一、MQ用途   1、同步变异步消息   场景:用户下单完成后,发送邮件和短信通知。   运用消息队列之后,用户下单完之后,下单信息写入数据库,再写入消息队列,发送邮件和发送短信各自去消息队列进行读取,节省时间,提高效率。          2、应用解耦   场景:用户下单后,订单系统需要多渠道通知用户。   下单服务系统:用户使用下单服务后,将下单信息写入数据库,下单成功。   短信服务系统:用户下单后,将短信信息写入消息队列,以发送短信信息通知用户交易信息。   邮件服务系统:用户下单后,将邮件信息写入消息队列,以发送邮件信息通知用户交易信息。   这样,如果微信通知不能正常使用,也不影响用户下单,用户下单后,只用把下单通知信息写入消息队列,不用关心后续操作,实现了订单系统和通知系统的解耦。                3、流量削峰   一般在秒杀或者团购活动中使用。   场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。针对这个问题,一般需要在应用前端加入消息队列。     a.可以控制活动的人数     b.可以缓解短时间内高流量压垮应用   用户的请求,服务器接收后,首先写入消息队列,如果消息队列的数量大于最大的数量

Outlook2016 不能自动配置企业Exchange的解决办法

前提是你 提交于 2019-12-01 09:53:44
最新重装了系统,设置Outlook2016连接服务器时不能自动配置,以前用Outlook2013没有问题,现在升级到2016只能采用自动配置。经过很多周折,最终通过下面的方法解决了,如果你也有这样的问题希望对你有帮助。 1. 确认公司邮箱可以用owa(outlook web app)登录, 比如 mail.company.com/owa。 尝试打开下面的地址: mail.company.com/autodiscover/autodiscover.xml, 会出现下面的错误信息。 2. 在自己电脑本地写一个autodiscover.xml(notepad复制即可) <?xml version="1.0" encoding="utf-8"?> <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006"> <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a"> <Account> <AccountType>email</AccountType> <Action>redirectUrl</Action>