封装RabbitTemplate,使用自定义消息转换器
前面创建项目我就省了。。。活不多说直接上代码!
核心代码
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,使用自定义消息转换器的更多相关文章
- SpringBoot添加自定义消息转换器
首先我们需要明白一个概念:springboot中很多配置都是使用了条件注解进行判断一个配置或者引入的类是否在容器中存在,如果存在会如何,如果不存在会如何. 也就是说,有些配置会在springboot中 ...
- JavaEE开发之SpringMVC中的自定义消息转换器与文件上传
上篇博客我们详细的聊了<JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术>,本篇博客依然是JavaEE开发中的内容,我们就来聊一下SpringMVC中的自定义消息转发器 ...
- springboot自定义消息转换器HttpMessageConverter
在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...
- Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
1.前言 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度 ...
- springboot自定义消息转换器HttpMessageConverter Spring Boot - 使用Gson替换Jackson
Jackson一直是springframework默认的json库,从4.1开始,springframework支持通过配置GsonHttpMessageConverter的方式使用Gson. 在典型 ...
- SpringBoot 消息转换器 HttpMessageConverter
1.简介: Spring在处理请求时,由合适的消息转换器将请求报文绑定为方法中的形参对象,在这里,同一个对象就有可能出现多种不同的消息形式,比如json和xml.同样,当响应请求时,方法的返回值也同样 ...
- SpringMVC自定义配置消息转换器踩坑总结
问题描述 最近在开发时候碰到一个问题,springmvc页面向后台传数据的时候,通常我是这样处理的,在前台把数据打成一个json,在后台接口中使用@requestbody定义一个对象来接收,但是这次数 ...
- springmvc-自定义消息转换器
最近的项目没有用到这个,先把自己自学跑通的例子先帖出来,供自己以后参考吧! 如有不对地方望指出! 一.自定义类实现AbstractHttpMessageConverter package com.dz ...
- (四)SpringBoot如何定义消息转换器
一:添加fastjson依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastj ...
- Spring 消息转换器和注解控制器
目录 1.什么是消息转换器? 2.消息转换器结构:HttpMessageConverter 3.Spring 调用逻辑 3.1 HandlerMethodArgumentResolver 接口 和 H ...
随机推荐
- 如何通过API接口获取京东的商品评论
如果您想要获取京东的商品评论,可以通过API接口来实现.这篇文章会介绍如何使用京东API接口获取商品的评论数据. 首先,您需要到京东开放平台注册成为开发者,然后创建一个应用程序.通过这个应用程序,您可 ...
- 2D KD-Tree实现
KD-tree 1.使用背景 在项目中遇到一个问题: 如何算一个点到一段折线的最近距离~折线的折点可能有上千个, 而需要检索的点可能出现上万的数据量, 的确是个值得思考的问题~ 2.暴力解法 有个比较 ...
- 运行解压版tomcat中的startup.bat一闪而退的解决办法
Tomcat的startup.bat,它调用了catalina.bat,而catalina.bat则调用了setclasspath.bat,只要在setclasspath.bat的开头声明环境变量(红 ...
- 安卓APK加固工具 如何进行实名认证购买和激活
安卓APK资源混淆加密重签名工具 价格表 授权时长 价格 1小时 49 1天 99 1个月 199 1个季度 399 半年 599 1年 799 付费版功能 功能点 免费版 付费版 去除广告信息 × ...
- xxl-job初学转载,不断更新
参考:https://blog.csdn.net/xhmico/article/details/122324950 官网与源码下载地址 官网:https://www.xuxueli.com/xxl-j ...
- Solution -「九省联考 2018」IIIDX
Description Link. 给出一个堆,然后让你填数进去,使得其满足小根堆的性质,并使编号靠前的点的数最大. Solution 考虑贪心,把原数列降序排序,然后因为这个东西是整除分块的形式,所 ...
- 6.swagger完善:界面显示注释+多版本控制
周末,写点简单的水一下. 新版本的vs创建项目的时候可以选择自带一个swagger.然而这只是基本的swagger功能. 几个接口无所谓啦,随着接口越来越多,就这么丢给你,一时间也会懵逼,所以这篇文章 ...
- 实战指南,SpringBoot + Mybatis 如何对接多数据源
本文分享自华为云社区 <实战指南,SpringBoot + Mybatis 如何对接多数据源>,作者:战斧. 在我们开发一些具有综合功能的项目时,往往会碰到一种情况,需要同时连接多个数据库 ...
- PostgreSQL学习笔记-4.基础知识:空值NULL、别名AS
NULL 值代表遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. 语法 当创建表时,NULL 的基本语法如下: CREATE T ...
- P4032 [Code+#2] 火锅盛宴
prologue 树状数组推荐写法,感谢巨佬樱雪喵的教学. inline int lowbit(int x) { return x & -x; } inline void add(int x, ...