springboot 集成rabbitMQ
package com.jd.ng.shiro.config.rabbitMQconfig; import com.jd.ng.shiro.rabbitMqListener.SimpleMessageListener;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment; import java.util.HashMap;
import java.util.Map; /**
* @Author: husToy.Wang
* @Date: 2019/6/12 18:14
* @Version 1.0
*/
@Configuration
public class myrabbitmqConfig { @Autowired
private RabbitTemplate rabbitTemplate; @Autowired
private Environment env; @Autowired
private CachingConnectionFactory connectionFactory; @Autowired
private SimpleRabbitListenerContainerFactoryConfigurer factoryConfigurer; @Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
} /**
* 声明product.exchange 交换器
*
* @return
*/
@Bean(name = "directExchange")
public DirectExchange directExchange() {
return new DirectExchange(env.getProperty("mq.exchange.product.exchange"), true, false);
} @Bean(name = "directProductQueue")
public Queue directProductQueue() {
Queue queue = new Queue(env.getProperty("mq.exchange.product.queue"), true, false, false);
return queue;
} @Bean
public Binding binding() {
Binding bind = BindingBuilder.bind(directProductQueue()).to(directExchange()).with(env.getProperty("mq.exchange.product.routingKey"));
return bind;
} @Autowired
private SimpleMessageListener simpleMessageListener; // TODO 配置并发与确认机器 (针对于一个队列)
@Bean(name = "simpleContainer")
public SimpleMessageListenerContainer simpleContainer(@Qualifier("directProductQueue") Queue directProductQueue) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory); //TODO:并发配置
container.setConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.concurrency", Integer.class));
container.setMaxConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.max-concurrency", Integer.class));
container.setPrefetchCount(env.getProperty("spring.rabbitmq.listener.prefetch", Integer.class)); //TODO:消息确认-确认机制种类
container.setAcknowledgeMode(AcknowledgeMode.MANUAL); // 指定确认机制
container.setQueues(directProductQueue); //指定队列
container.setupMessageListener(simpleMessageListener);
return container;
} /**
* 多个消费者 ,不指定具体的队列
*/
@Bean(name ="multiListenerContainer")
public SimpleRabbitListenerContainerFactory multiListenerContainer(){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); // TODO 指定配置文件 (监听厂,包括连接工厂)
factoryConfigurer.configure(factory, connectionFactory);
factory.setAcknowledgeMode(AcknowledgeMode.NONE);
factory.setConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.concurrency", Integer.class));
factory.setMaxConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.max-concurrency", Integer.class));
factory.setPrefetchCount(env.getProperty("spring.rabbitmq.listener.prefetch", Integer.class)); return factory; } // 定义一个订单queue
@Bean(name = "userOrderQueue")
public Queue userOrderQueue(){
Map<String,Object> args = new HashMap();
args.put("x-dead-letter-exchange", env.getProperty("mq.exchange.dead.exchange"));
args.put("x-dead-letter-routing-key", env.getProperty("mq.exchange.dead.routing.key"));
args.put("x-message-ttl", 1000*60*3); // 整体队列三分仲超时
Queue queue = new Queue(env.getProperty("mq.exchange.order.queue"), true, false, false, args );
return queue;
} // 创建订单交换器
@Bean(name = "userOrderExchange")
public DirectExchange userOrderExchange(){
return new DirectExchange(env.getProperty("mq.exchange.order.exchange"), true, false);
} // 订单队列绑定到订单交换器
@Bean
public Binding userOrderBing(){
return BindingBuilder.bind(userOrderQueue()).to(userOrderExchange()).with(env.getProperty("mq.exchange.order.routing.key"));
} // 创建死信交换器
@Bean(name = "orderDeadExchange")
public DirectExchange orderDeadExchange(){
return new DirectExchange(env.getProperty("mq.exchange.dead.exchange"),true,false);
} // 创建死信队列
@Bean(name = "orderDeadQueue")
public Queue orderDeadQueue(){
return new Queue(env.getProperty("mq.exchange.dead.queue"),true,false,false);
} // 绑定死信交换器与交队列
@Bean
public Binding deadQueueBind(){
return BindingBuilder.bind(orderDeadQueue()).to(orderDeadExchange()).with(env.getProperty("mq.exchange.dead.routing.key"));
} }
springboot 集成rabbitMQ的更多相关文章
- SpringBoot集成rabbitmq(二)
前言 在使用rabbitmq时,我们可以通过消息持久化来解决服务器因异常崩溃而造成的消息丢失.除此之外,我们还会遇到一个问题,当消息生产者发消息发送出去后,消息到底有没有正确到达服务器呢?如果不进行特 ...
- SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门
1.RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.Rabbi ...
- springboot集成rabbitmq(实战)
RabbitMQ简介RabbitMQ使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现(AMQP的主要特征是面向消息.队列.路由.可靠性.安全).支持多种客户端,如:Python.Ru ...
- SpringBoot集成rabbitmq(一)
前言 Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现.核心作用就是创建消息队列,异步发送和接收消息.通常用来在高并发中处理削峰填谷.延迟处理.解耦系统之间的强耦合.处理秒杀订单. 入 ...
- SpringBoot集成RabbitMQ
官方说明:http://www.rabbitmq.com/getstarted.html 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ ...
- Java SpringBoot集成RabbitMq实战和总结
目录 交换器.队列.绑定的声明 关于消息序列化 同一个队列多消费类型 注解将消息和消息头注入消费者方法 关于消费者确认 关于发送者确认模式 消费消息.死信队列和RetryTemplate RPC模式的 ...
- SpringBoot集成RabbitMQ并实现消息确认机制
原文:https://blog.csdn.net/ctwy291314/article/details/80534604 RabbitMQ安装请参照RabbitMQ应用 不啰嗦直接上代码 目录结构如下 ...
- springboot集成rabbitmq并手动注册容器实现单个queue的ack模式
原文:https://blog.csdn.net/qq_38439885/article/details/88982373 进入正题,本文会介绍两种实现rabbitmq的ack模式的方法,分别为: 一 ...
- Springboot集成RabbitMQ之MessageConvert源码解析
问题 最近在使用RabbitMq时遇到了一个问题,明明是转换成json发送到mq中的数据,消费者接收到的却是一串数字也就是byte数组,但是使用mq可视化页面查看数据却是正常的,之前在使用过程中从未遇 ...
- SpringBoot集成RabbitMQ 从零到一,学会MQ异步和解耦--
RabbitMQ 概念 RabbitMQ 即一个消息队列,_主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用._RabbitMQ使用的是AMQP协议,它是一种二进制协议.默认启 ...
随机推荐
- 大牛整理最全Python零基础入门学习资料
大牛整理最全Python零基础入门学习资料 发布时间:『 2017-11-12 11:56 』 帖子类别:『人工智能』 阅读次数:3504 (本文『大牛整理最全Python零基础入门学习资料 ...
- 关于openGL、GPUImage、ios直播相关不错的博客
http://www.jianshu.com/users/815d10a4bdce/latest_articles
- 剑指 Offer——数组中的逆序对
1. 题目 2. 解答 借助于归并排序的分治思想,在每次合并的时候统计逆序对.因为要合并的两个数组都是有序的,如果左半部分数组当前值大于右半部分数组当前值,那么左半部分数组当前值右边的数就都大于右半部 ...
- 使用GOGS搭建自己的Git托管
大家在开发中一般使用的git服务都是公司搭建好的,或者就是直接用gayhub提供的免费的仓库 如果想搭建一个自己的仓库的话怎么弄,这里给大家安利一款开箱即用的git托管服务:gogs. gogs是基于 ...
- 5款vue前端UI框架
Vue.js是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. 实用的 Vue.js组件库可以帮助我们快速搭建页面,下面介绍小编认为比较受欢迎的五个vue ...
- vue项目 引入js文件
例如我想将laydate.js引到vue项目中 将用到的js文件放到static文件夹内,在项目的根目录下的index.html内引入 <script src="static/js/l ...
- [Python3 练习] 003 货币转换
题目:货币转换 (1) 描述 人民币和美元是世界上通用的两种货币,写一个程序进行货币间币值转换 记人民币和美元之间的汇率为:1 美元 = 6.78 人民币 程序可以接受人民币或美元输入,转换为另一种货 ...
- Airbnb开源 快速搭建企业级BI数据平台
最近在公司做一个数据可视化相关的项目,使用了Airbnb开源维护的企业级BI数据平台superset,相较于tableau这种收费的商业软件,Superset是开源维护的,同时图表的种类和颜值普遍偏高 ...
- Python 批量文件下载
python文件 批量下载 .图片批量下载 ,批量请求.爬虫 #==================================================================== ...
- 异常处理 VEH
不算新的东西,也都不小了, VEH的结构处理,平行于SEH,但是略有区别, 相关函数有四个 PVOID WINAPI AddVectoredExceptionHandler( _In_ ULONG F ...