Spring AMQP】的更多相关文章

基于spring amqp rabbitmq fanout配置如下: 发布端 <rabbit:connection-factory id="rabbitConnectionFactory" username="guest" password="guest" host="localhost" port="5672"/> <rabbit:template id="amqpTempla…
一般在稍微大一点的项目中,需要配置多个数据库数据源,最简单的方式是用 Spring 来实现,只需要继承 AbstractRoutingDataSource 类,实现 determineCurrentLookupKey 方法,再配合使用 ThreadLocal 就可以实现. 但是如何实现 MQ 的多数据源呢?假设有部署在不同服务器上的两个消息队列,或者是同一服务器,不同 vhost 的消息队列,在一个项目中,我如何自由地选择从哪个队列收发消息呢?下面说说用 Spring AMQP + Rabbit…
本文是译文,原文请访问:http://www.rabbitmq.com/tutorials/tutorial-one-spring-amqp.html RabbitMQ 是一个Brocker (消息队列服务器),它接受和转发消息 . 你可以将它当做邮局: 当你将要发布的邮件放在邮箱中时,您可以确定邮件先生或Mailperson女士最终会将邮件发送给您的收件人.在这个比喻中,RabbitMQ是邮箱,邮局和邮递员. RabbitMQ和邮局之间的主要区别在于它不处理信纸,而是接受,存储和转发二进制大对…
Rabbitmq简介 生产者会把消息发送给RabbitMQ的交换中心(Exchange),Exchange的一侧是生产者,另一侧则是一个或多个队列,由Exchange决定一条消息的生命周期--发送给某些队列,或者直接丢弃掉. <rabbit:topic-exchange name="global.batman.cache"> <rabbit:bindings> <rabbit:binding queue="instanceRouteRefresh…
### 准备 ## 目标 通过 XML 配置文件使用 Spring AMQP ## 前置知识 <Spring AMQP 源码分析 07 - MessageListenerAdapter> ## 相关资源 Sample code:<https://github.com/gordonklg/study>,rabbitmq module 源码版本:Spring AMQP 1.7.3.RELEASE ## 测试代码 gordon.study.rabbitmq.springamqp.XmlC…
### 准备 ## 目标 了解 Spring AMQP 如何用 POJO 处理消息 ## 前置知识 <Spring AMQP 源码分析 04 - MessageListener> ## 相关资源 Offical doc:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#message-listener-adapter> Sample code:<https:…
### 准备 ## 目标 了解 Spring AMQP 如何手动确认消息已成功消费 ## 前置知识 <Spring AMQP 源码分析 04 - MessageListener> ## 相关资源 Offical doc:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#message-listener-adapter> Sample code:<https:…
### 准备 ## 目标 了解 Spring AMQP Message Listener 如何处理异常 ## 前置知识 <Spring AMQP 源码分析 04 - MessageListener> ## 相关资源 Offical doc:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#exception-handling> Sample code:<ht…
### 准备 ## 目标 了解 Spring AMQP 如何实现异步消息投递(推模式) ## 前置知识 <RabbitMQ入门_05_多线程消费同一队列> ## 相关资源 Quick Tour for the impatient:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#async-consumer> Sample code:<https://git…
### 准备 ## 目标 了解 Spring AMQP 消息转化实现   ## 相关资源 Quick Tour for the impatient:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#message-converters>   Sample code:<https://github.com/gordonklg/study>,rabbitmq modu…
### 准备 ## 目标 了解 CachingConnectionFactory 在默认缓存模式下的工作原理   ## 前置知识   <Spring AMQP 源码分析 01 - Impatient>   ## 测试代码 同 <Spring AMQP 源码分析 01 - Impatient>   ### 分析 ## 流程分析 从 <Spring AMQP 源码分析 01> 可知,在 RabbitTemplate 的  execute(ChannelCallback ac…
### 准备   ## 目标 了解 Spring AMQP 核心代码   ## 前置知识 RabbitMQ 入门   ## 相关资源   Quick Tour for the impatient:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_introduction.html#quick-tour>   Sample code:<https://github.com/gordonklg/stud…
Spring AMQP 是基于 Spring 框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO的消息监听等,很大方便我们使用RabbitMQ程序的相关开发. Spring AMQP包含一些模块,如:spring-amqp, spring-rabbit and spring-erlang等,每个模块分别由独立的一些Jar包组成. Spring AMQP模块主要包含org.springframework.amqp.core这个包中.这个包定义的相关类主要是…
前一篇中我们介绍了使用RabbitMQ Java Client访问RabbitMQ的方法.但是使用这种方式访问RabbitMQ,开发者在程序中需要自己管理Connection,Channel对象,Consumer对象的创建,销毁,这样会非常不方便.我们下面介绍使用spring AMQP连接RabbitMQ,进行消息的接收和发送. Spring AMQP是一个Spring子项目,它提供了访问基于AMQP协议的消息服务器的解决方案.它包含两部分,spring-ampq是基于AMQP协议的消息发送和接…
前言 1. AMQP 核心组件 RabbitAdmin SpringAMQP声明 RabbitTemplate SimpleMessageListenerContainer MessageListenerAdapter MessageConverter 2. RabbitAdmin RabbitAdmin类可以很好的才注意RabbitMQ,在Spring中直接进行诸如即可. 注意: autoStartUp必须要设置为true,否则Spring容器不会加载RabbitAdmin类 RabbitAd…
1.SpringAMQP用户管理组件RabbitAdmin. RabbitAdmin类可以很好的操作RabbitMQ,在Spring中直接进行注入即可.注意,autoStartup必须设置为true,否则Spring容器不会加载RabbitAdmin类.RabbitAdmin底层实现就是从Spring容器中获取Exchange交换机.Binding绑定.RoutingKey路由键以及Queue队列的@Bean声明. 然后使用RabbitTemplate的execute方法执行对应的声明.修改.删…
文章目录 1. 原生的实现方式 2. Spring AMQP 的实现方式   要从奔溃的 RabbitMQ 中恢复的消息,我们需要做消息持久化.如果消息要从 RabbitMQ 奔溃中恢复,那么必须满足三点,且三者缺一不可. 交换器必须是持久化. 队列必须是持久化的. 消息必须是持久化的. 原生的实现方式 原生的 RabbitMQ 客户端需要完成三个步骤. 第一步,交换器的持久化. // 参数1 exchange :交换器名 // 参数2 type :交换器类型 // 参数3 durable :是…
在使用 Spring AMQP 发送消息到 RabbitMQ 的时候收到错误信息: inequivalent arg 'x-queue-type' for queue 'com.ossez.real.estate' in vhost '/': received none but current is the value 'classic' of type 'longstr', class-id=50, method-id=10 上面的错误信息已经很明显了,说明的是发送消息的队列参数中少了 x-q…
一.RabbitTemplate介绍 RabbitTemplate:消息模板,在与Spring AMQP整合时,进行发送消息的关键类. 包括了可靠性投递消息方法.回调监听消息接口ConfirmCallBack.返回值确认接口ReturnCallBack等,同样需要进行注入到ioc容器中. 与spring整合需要实例化,与spring boot整合只需要在配置文件中配置就好了 相关配置 @Bean public RabbitTemplate rabbitTemplate(ConnectionFac…
在上一篇博文中,我们写了程序来发送和接受消息从一个队列中. 在这篇博文中我们将创建一个工作队列,用于在多个工作人员之间分配耗时的任务. Work Queues 工作队列(又称:任务队列)背后的主要思想是避免立即执行资源密集型任务,并且必须等待它完成.相反,我们安排任务稍后完成.我们将任务封装 为消息并将其发送到队列.在后台运行的工作进程将弹出任务并最终执行作业.当您运行许多工作程序时,它们之间将共享任务. 这个概念在Web应用程序中特别有用,因为在短的HTTP请求窗口中无法处理复杂的任务. 我们…
在第一篇教程中,我们展示了如何使用start.spring.io来利用Spring Initializr创建一个具有RabbitMQ starter dependency的项目来创建spring-amqp应用程序. 在上一个教程中,我们创建了一个新的包(tut2)来放置我们的配置,发送者和接收者,并创建了一个包含两个使用者的工作队列.工作队列背后的假设是每个任务都交付给一个工作者. 在这部分中,我们将实现扇出模式,以向多个消费者传递消息.此模式称为 Publish/Subscribe “发布/订…
在上一个教程中,我们构建了一个简单的fanout(扇出)交换.我们能够向许多接收者广播消息. 在本教程中,我们将为其添加一个功能 - 我们将只能订阅一部分消息.例如,我们将只能将消息指向感兴趣的特定颜色(“orange”,“black”,“green”),同时仍然能够在控制台上打印所有消息. 绑定 在前面的例子中,我们已经在创建绑定.您可以在我们的Tut3Config文件中调用这样的代码: @Bean public Binding binding1(FanoutExchange fanout,…
在上一个教程中,我们提高了消息传递的灵活 我们使用direct交换而不是使用仅能够进行虚拟广播的fanout交换, 并且获得了基于路由key 有选择地接收消息的可能性. 虽然使用direct 交换改进了我们的系统,但它仍然有局限性 - 它不能基于多个标准进行路由. 在我们的消息传递系统中,我们可能不仅要根据路由key订阅队列,还要根据生成消息的源来订阅队列. 为了在我们的日志记录系统中实现这种灵活性,我们需要了解更复杂的topic交换. Topic Exchange 发送到topic 交换的消息…
Remote procedure call (RPC) 在第二篇教程中,我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务. 但是如果我们需要在远程计算机上运行一个函数并等待结果呢?嗯,这是一个不同的故事.此模式通常称为远程过程调用或RPC. 在本教程中,我们将使用RabbitMQ构建RPC系统:客户端和可伸缩的RPC服务器. 由于我们没有任何值得分发的耗时任务,我们将创建一个返回Fibonacci数字的虚拟RPC服务. 客户端界面 为了说明如何使用RPC服务,我们将从“Sender”和…
讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽然通道有助于解耦消息的生产者和消费者,但这两者依然会与通道相耦合.生产者会将消息发布到一个特定的队列或主题上,消费者从特定的队列或主题上接收这些消息,通道具有双重责任,就是传递数据和确定这些消息该发送到什么地方,队列的话会使用点对点算法发送,主题的话就使用发布-订阅方式.而使用AMQP的话,生产者并…
上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息.通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bean注入到服务层类中,并使用它创建Connection,使用这个Connection来创建Channel,再使用这个Channel发布消息到Exchange中. 当然Spring AMQP提供了RabbitTemplate来简便我们的操作,消除RabbitMQ发送和接收消息相关的样板代码.使用Rabb…
上一篇<Spring集成RabbitMQ-使用RabbitMQ更方便>中,我们只需要添加响应jar的依赖,就可以写一个Spring集成RabbitMQ下非常简单收发消息的程序. 我们使用的spring-rabbit的版本是当前官方最新的2.0.0.M5,这篇主要介绍下最新版本的spring amqp相对老版本有哪些新特性和升级. 常规改进 ExchangeBuilder在该版本中默认会创建持久化的exchange,就是我们熟悉的durable属性 @QueueBinding注解中用到的@Exc…
一.AMQP 概述 AMQP(Advanced Message Queuing Protocol),高级消息队列协议. 简单回忆一下JMS的消息模型,可能会有助于理解AMQP的消息模型.在JMS中,有三个主要的参与者:消息的生产者.消息的消费者以及在生产者和消费者之间传递消息的通道(队列或主题).在JMS中,通道有助于解耦消息的生产者和消费者,但是这两者依然会与通道相耦合.与之不同的是,AMQP的生产者并不会直接将消息发布到队列中.AMQP在消息的生产者以及传递信息的队列之间引入了一种间接的机制…
上篇讲了使用RabbitMQ发送消息,本篇则来讲接收消息.在传统JMS中有两种从队列获取信息的方式,使用JmsTemplate的同步方式以及使用消息驱动pojo的异步方式.Spring AMQP也提供了类似的方式来获取通过AMQP发送的消息. 使用RabbitTemplate来接收消息 RabbitTemplate提供的接收信息的方法中最简单的就是receive()方法,通过该方法就可以从队列中获取一个Message对象: Message message = rabbit.receive("sp…
摘要: 介绍confirm的工作机制.使用spring-amqp介绍事务以及发布确认的使用方式.因为事务以及发布确认是针对channel来讲,所以在一个连接中两个channel,一个channel可以使用事务,另一个channel可以使用发布确认,并介绍了什么时候该使用事务,什么时候该使用发布确认 confirm的工作机制 ‍ Confirms是增加的一个确认机制的类,继承自标准的AMQP.这个类只包含了两个方法:confirm.select和confirm.select-ok.另外,basic…