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的更多相关文章

  1. SpringBoot集成rabbitmq(二)

    前言 在使用rabbitmq时,我们可以通过消息持久化来解决服务器因异常崩溃而造成的消息丢失.除此之外,我们还会遇到一个问题,当消息生产者发消息发送出去后,消息到底有没有正确到达服务器呢?如果不进行特 ...

  2. SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门

    1.RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.Rabbi ...

  3. springboot集成rabbitmq(实战)

    RabbitMQ简介RabbitMQ使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现(AMQP的主要特征是面向消息.队列.路由.可靠性.安全).支持多种客户端,如:Python.Ru ...

  4. SpringBoot集成rabbitmq(一)

    前言 Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现.核心作用就是创建消息队列,异步发送和接收消息.通常用来在高并发中处理削峰填谷.延迟处理.解耦系统之间的强耦合.处理秒杀订单.  入 ...

  5. SpringBoot集成RabbitMQ

    官方说明:http://www.rabbitmq.com/getstarted.html 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ ...

  6. Java SpringBoot集成RabbitMq实战和总结

    目录 交换器.队列.绑定的声明 关于消息序列化 同一个队列多消费类型 注解将消息和消息头注入消费者方法 关于消费者确认 关于发送者确认模式 消费消息.死信队列和RetryTemplate RPC模式的 ...

  7. SpringBoot集成RabbitMQ并实现消息确认机制

    原文:https://blog.csdn.net/ctwy291314/article/details/80534604 RabbitMQ安装请参照RabbitMQ应用 不啰嗦直接上代码 目录结构如下 ...

  8. springboot集成rabbitmq并手动注册容器实现单个queue的ack模式

    原文:https://blog.csdn.net/qq_38439885/article/details/88982373 进入正题,本文会介绍两种实现rabbitmq的ack模式的方法,分别为: 一 ...

  9. Springboot集成RabbitMQ之MessageConvert源码解析

    问题 最近在使用RabbitMq时遇到了一个问题,明明是转换成json发送到mq中的数据,消费者接收到的却是一串数字也就是byte数组,但是使用mq可视化页面查看数据却是正常的,之前在使用过程中从未遇 ...

  10. SpringBoot集成RabbitMQ 从零到一,学会MQ异步和解耦--

    RabbitMQ 概念 RabbitMQ 即一个消息队列,_主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用._RabbitMQ使用的是AMQP协议,它是一种二进制协议.默认启 ...

随机推荐

  1. Android手机fastboot 刷机命令【转】

    本文转载自:http://luke-feng.iteye.com/blog/2171090 简介:在安卓手机中fastboot是一种比recovery更底层的模式.fastboot是一种线刷,就是使用 ...

  2. 织梦自定义表单导出为excel功能

    1.首先在后台修改/dede/templets/diy_main.htm <a href="../plus/diy.php?action=daochu&diyid={dede: ...

  3. oracle查询语句,根据中文的拼音排序

    SELECT * FROM USER t ORDER BY nlssort(FIRSTNAME, 'NLS_SORT=SCHINESE_PINYIN_M')

  4. scrapy Pipeline使用twisted异步实现mysql数据插入

    from twisted.enterprise import adbapi class MySQLAsyncPipeline: def open_spider(self, spider): db = ...

  5. 《图解设计模式》读书笔记8-1 Observer模式

    目录 示例程序 程序类图 程序 角色和类图 角色 类图 思路拓展 可复用性 Observer的顺序 MVC模式 Observer模式 Observer模式即观察者模式,该模式中,被观察者的状态发生变化 ...

  6. nw打包vue项目exe

    首先需要下载nw,然后解压打开,如图: 在以上新建一个同级项目文件夹,然后把把项目打包,将dist中的static文件夹与index.html放入,并新建一个package.json(可使用npm i ...

  7. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  8. ArrayList,linkedList vecator的实现和区别

    1.线程安全问题. ArrayList 和 linkedList 线程是不安全的,而vecator是线程安全的. 因为ArrayList 和 linkedList 是线程不同步的,vecator是同步 ...

  9. WebServiceBinding属性

    属性 类型 读 写 说明 ConformsTo Wsiprofiles x x 绑定需要遵守的WS-I标准 EmitConformanceClaims Boolean     如果为true,当WSD ...

  10. SocketChannel 读取ByteBuf 的过程

    SocketChannel 读取ByteBuf 的过程: 我们首先看NioEventLoop 的processSelectedKey 方法: private void processSelectedK ...