前面创建项目我就省了。。。活不多说直接上代码!

核心代码

RabbitMQConfig

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.ExchangeBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @author QiuQiu&LL
* @version 1.0
*/
@Slf4j
@Configuration
public class RabbitMQConfig { @Value("${spring.rabbitmq.host}")
private String addresses; @Value("${spring.rabbitmq.port:5672}")
private Integer port; @Value("${spring.rabbitmq.username}")
private String username; @Value("${spring.rabbitmq.password}")
private String password; public static final String MSG_RETURN_RECEIPT_EXCHANGE_NAME = "ms.message.receipt.exchange"; public static final String MSG_RETURN_RECEIPT_QUEUE_NAME = "ms.message.receipt.queue"; /**
* 消息回执交换机
*
* @return
*/
@Bean("receiptExchange")
public Exchange createExchange() {
return ExchangeBuilder.directExchange(MSG_RETURN_RECEIPT_EXCHANGE_NAME).durable(true).build();
} /**
* 消息回执队列
*
* @return
*/
@Bean("receiptQueue")
public Queue createQueue() {
return QueueBuilder.durable(MSG_RETURN_RECEIPT_QUEUE_NAME).build();
} /**
* 绑定交换机和队列
*
* @param exchange
* @param queue
* @return
*/
@Bean
public Binding createBinding(@Qualifier("receiptExchange") Exchange exchange,
@Qualifier("receiptQueue") Queue queue) {
return BindingBuilder.bind(queue).to(exchange).with(MSG_RETURN_RECEIPT_QUEUE_NAME).noargs();
} /**
* 自定RabbitTemplate
*/
@Bean(name = "ReceiptRabbitTemplate")
public RabbitTemplate rabbitTemplate(@Qualifier("ReceiptConnectionFactory") ConnectionFactory connectionFactory,
@Qualifier("ReceiptMessageConverter") MessageConverter messageConverter) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMessageConverter(messageConverter);
return template;
} /**
* RabbitMQConfig中定义connectionFactory中设置属性
*
* @return
*/
@Bean("ReceiptConnectionFactory")
public ConnectionFactory connectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setAddresses(this.addresses);
cachingConnectionFactory.setUsername(this.username);
cachingConnectionFactory.setPassword(this.password);
cachingConnectionFactory.setPort(this.port);
return cachingConnectionFactory;
} /**
* 消息转换器
*
* @return
*/
@Bean("ReceiptMessageConverter")
public MessageConverter receiptMessageConverter() {
return new ReceiptMessageConverter();
}
}

ReceiptMessageConverter:这里大家根据自己需要自定义即可

import com.alibaba.fastjson.JSON;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.support.converter.AbstractMessageConverter;
import org.springframework.amqp.support.converter.MessageConversionException; /**
* @author QiuQiu&LL
* @version 1.0
*/
public class ReceiptMessageConverter extends AbstractMessageConverter {
@Override
protected Message createMessage(Object object, MessageProperties messageProperties) {
return new Message(JSON.toJSONBytes(object), messageProperties);
} @Override
public Object fromMessage(Message message) throws MessageConversionException {
return JSON.parse(message.getBody());
}
}

ReceiptMessageService

/**
* @author QiuQiu&LL
* @version 1.0
*/
public interface ReceiptMessageService {
void receiptNotify(Object message);
}

ReceiptMessageServiceImpl

/**
* @author QiuQiu&LL
* @version 1.0
*/
@Service
public class ReceiptMessageServiceImpl implements ReceiptMessageService { private final RabbitTemplate rabbitTemplate; @Autowired
public ReceiptMessageServiceImpl(@Qualifier("ReceiptRabbitTemplate") RabbitTemplate rabbitTemplate,
@Qualifier("ReceiptMessageConverter") MessageConverter messageConverter) {
rabbitTemplate.setMessageConverter(messageConverter);
this.rabbitTemplate = rabbitTemplate;
} @Override
public void receiptNotify(Object message) {
rabbitTemplate.convertAndSend(RabbitMQConfig.MSG_RETURN_RECEIPT_EXCHANGE_NAME,
RabbitMQConfig.MSG_RETURN_RECEIPT_QUEUE_NAME, message);
}
}

MessageReturnReceiptListener

/**
* @author QiuQiu&LL
* @version 1.0
* 消息回执监听
*/
@Slf4j
@Component
public class MessageReturnReceiptListener { @RabbitListener(queues = RabbitMQConfig.MSG_RETURN_RECEIPT_QUEUE_NAME)
public void returnReceipt(String message) {
log.info("回执队列接收到的消息为:{}", message);
} }

封装RabbitTemplate,使用自定义消息转换器的更多相关文章

  1. SpringBoot添加自定义消息转换器

    首先我们需要明白一个概念:springboot中很多配置都是使用了条件注解进行判断一个配置或者引入的类是否在容器中存在,如果存在会如何,如果不存在会如何. 也就是说,有些配置会在springboot中 ...

  2. JavaEE开发之SpringMVC中的自定义消息转换器与文件上传

    上篇博客我们详细的聊了<JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术>,本篇博客依然是JavaEE开发中的内容,我们就来聊一下SpringMVC中的自定义消息转发器 ...

  3. springboot自定义消息转换器HttpMessageConverter

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...

  4. Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)

    1.前言 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度 ...

  5. springboot自定义消息转换器HttpMessageConverter Spring Boot - 使用Gson替换Jackson

    Jackson一直是springframework默认的json库,从4.1开始,springframework支持通过配置GsonHttpMessageConverter的方式使用Gson. 在典型 ...

  6. SpringBoot 消息转换器 HttpMessageConverter

    1.简介: Spring在处理请求时,由合适的消息转换器将请求报文绑定为方法中的形参对象,在这里,同一个对象就有可能出现多种不同的消息形式,比如json和xml.同样,当响应请求时,方法的返回值也同样 ...

  7. SpringMVC自定义配置消息转换器踩坑总结

    问题描述 最近在开发时候碰到一个问题,springmvc页面向后台传数据的时候,通常我是这样处理的,在前台把数据打成一个json,在后台接口中使用@requestbody定义一个对象来接收,但是这次数 ...

  8. springmvc-自定义消息转换器

    最近的项目没有用到这个,先把自己自学跑通的例子先帖出来,供自己以后参考吧! 如有不对地方望指出! 一.自定义类实现AbstractHttpMessageConverter package com.dz ...

  9. (四)SpringBoot如何定义消息转换器

    一:添加fastjson依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastj ...

  10. Spring 消息转换器和注解控制器

    目录 1.什么是消息转换器? 2.消息转换器结构:HttpMessageConverter 3.Spring 调用逻辑 3.1 HandlerMethodArgumentResolver 接口 和 H ...

随机推荐

  1. Badusb制作,远程别人电脑

    Badusb制作 插一下U盘黑一台电脑,插了我的U盘你可就是我的脑了,(▽) 理论准备 我们要用它就应该知道他的工作原理是怎么样的,方便我们去发散思维去使用它. Badusb的原理是利用HID(Hum ...

  2. 《SQL与数据库基础》01. SQL概述 · 分类

    目录 SQL概述 SQL语法特征 SQL分类 本文以 MySQL 为例 SQL概述 SQL(Structured Query Language),结构化查询语言,用于访问和处理数据库的标准的计算机语言 ...

  3. Lazada详情接口的应用

    Lazada是东南亚电商领域的一家知名企业,Lazada商品详情接口是Lazada提供的一种获取Lazada平台商品详细信息的接口.本文将介绍Lazada商品详情接口的使用方法和相关注意事项. 第一步 ...

  4. DesignPattern-part1

    title: "modern C++ DesignPattern-Part1" date: 2018-04-03T16:06:33+08:00 lastmod: 2018-04-0 ...

  5. 探秘移动端BI:发展历程与应用前景解析

    什么是移动端BI 维基百科 上对于 移动端商业智能的定义是这样的 > Mobile BI is a system that presents historical and real-time i ...

  6. Solution -「洛谷 P1852」跳跳棋

    Description Link. 在一个数轴上给你三个点,移动方法是彼此为中点进行跳跃,不能同时越过两颗棋子. 给出初始状态和目标状态,问能否从初始状态跳到目标状态.若能,输出最少步数. 棋子之间互 ...

  7. Spring Boot 目录遍历--表达式注入--代码执行--(CVE-2021-21234)&&(CVE-2022-22963)&&(CVE-2022-22947)&&(CVE-2022-2296)

    Spring Boot 目录遍历--表达式注入--代码执行--(CVE-2021-21234)&&(CVE-2022-22963)&&(CVE-2022-22947)& ...

  8. Java开发面试--群面专区

    目录 一.群面背景 二.群面流程 三.群面角色 四.群面细节 五.群面礼仪 六.群面话术 七.个人演讲 八.群面题型 群面也称无领导小组~ 候选人们被要求在一个相对自由的环境中展示他们的能力,并在没有 ...

  9. Altium designer 设置覆铜与板框间距

    新版Altium designer不再推荐使用 Keep-Out 层作为板框 以前使用 Keep-Out 作为板框的一个很大原因是因为 Keep-Out 自带板框间距属性.省去甚至不用考虑铺铜的边缘问 ...

  10. 题解 P9326

    前言 数学符号约定 \(n\):任意正整数. \(\#\):从未出现过的小写字母. \(\Sigma\):字符集,这里指小写字母集合. \(S\):最终答案的字符矩阵. 其余符号同题目翻译中所写. 如 ...