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. <foreach></foreach>标签

    当传入参数为数组或者集合时需要通过<foreach></foreach>标签进行遍历 1.首先在po类中定义一个集合或者数组 比如 private List<Intege ...

  2. centos 6.9 mysql 安装配置

    1.全新系统,安装mysql yum -y install mysql mysql-server mysql-devel 2.启动mysql service mysqld start 3.修改密码 登 ...

  3. kubernetes-traefik(二十一)

    参考文档:http://traefik.cn/ traefik和ingress的对比 ingress: 使用nginx作为前端负载均衡,通过ingress controller不断的和kubernet ...

  4. ORACLE Physical Standby DG 之fail over

    SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;确认下是否存在日志间隙,发现gap现象,说明failo ...

  5. Week13 - 376. Wiggle Subsequence

    Week13 - 376. Wiggle Subsequence A sequence of numbers is called a wiggle sequence if the difference ...

  6. st.getParameter() 和request.getAttribute() 区别 https://terryjs.iteye.com/blog/1317610

    getParameter 是用来接受用post个get方法传递过来的参数的.getAttribute 必须先setAttribute. (1)request.getParameter() 取得是通过容 ...

  7. linux下升级php5.4到php5.6

    进入终端后查看php版本 php -v 输出可能如下: PHP 5.4.35 (cli) (built: Nov 14 2014 07:04:10) Copyright (c) 1997-2014 T ...

  8. jmeter _Random函数生成随机数

    因对发送邮件接口做压测发现相同数据对服务器的压力很小所以需要每次发送请求都需要不同的参数,所以要对某个字段做随机数 选项中-函数助手对话框

  9. [Web 前端] 009 css 常用的文本样式设置

    常用的文本 css 样式 概览 参数 释义 举例 color 设置文字的颜色 color:red; font-size 设置文字的大小 font-size:12px; font-family 设置文字 ...

  10. JDK 13 的 12 个新特性,真心涨姿势了

    作者:木九天 my.oschina.net/mdxlcj/blog/3107021 1.switch优化更新 JDK11以及之前的版本: switch (day) { case MONDAY: cas ...