SpringBoot整合多個(gè)Mq服務(wù)做法詳解
以rabbitmq為例
springboot項(xiàng)目想要整合rabbitmq非常簡(jiǎn)單,只需要在maven中引入對(duì)應(yīng)的starter即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>然后只需要在配置文件中配置spring.rabbitmq.***即可使用。
如果我們項(xiàng)目中需要配置多個(gè)mq服務(wù)的時(shí)候,springboot便不能幫我們自動(dòng)加載了,我們需要手動(dòng)加載對(duì)應(yīng)RabbitTemplate。
具體做法如下:
1、自定義一個(gè)MqTemplate
@Data
@Component
public class MqTemplate {
private RabbitTemplate rabbitTemplate;
private String exchange;
private String queue;
private String routing_key;
}在這里面我們定義了RabbitTemplate、交換機(jī)、路由,隊(duì)列,如果需要其他的數(shù)據(jù),也可以往上加
2、定義一個(gè)mq配置項(xiàng)相對(duì)應(yīng)的類
@Data
@Component
class MqConfiguration {
private String host;
private Integer port;
private String user;
private String password;
private String exchange;
private String queue;
private String routing_key;
}這個(gè)類的作用是將我們配置文件中的信息轉(zhuǎn)成實(shí)體類
3、將我們自定義的mq配置定義成MqTemplate類型的bean
@Configuration
public class MqConfig {
@Bean
@ConfigurationProperties(prefix = "mq.task-update-mq")
public MqConfiguration taskUpdateMqConfiguration(){
return new MqConfiguration();
}
@Bean
public MqTemplate taskUpdateMq(MqConfiguration taskUpdateMqConfiguration) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(taskUpdateMqConfiguration.getHost());
connectionFactory.setPort(taskUpdateMqConfiguration.getPort());
connectionFactory.setUsername(taskUpdateMqConfiguration.getUser());
connectionFactory.setPassword(taskUpdateMqConfiguration.getPassword());
connectionFactory.setVirtualHost("/");
connectionFactory.setPublisherConfirms(true); //必須要設(shè)置
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
MqTemplate mqTemplate = new MqTemplate();
mqTemplate.setRabbitTemplate(rabbitTemplate);
mqTemplate.setExchange(taskUpdateMqConfiguration.getExchange());
mqTemplate.setQueue(taskUpdateMqConfiguration.getQueue());
mqTemplate.setRouting_key(taskUpdateMqConfiguration.getRouting_key());
return mqTemplate;
}
}這里我們就將該mq配置加載成一個(gè)名為taskUpdateMq的bean。當(dāng)需要添加其他的mq服務(wù)的時(shí)候,我們只需要在這個(gè)配置類里面定義bean即可
4、使用對(duì)應(yīng)的Template發(fā)送消息
首先我們把taskUpdateMq注入到業(yè)務(wù)代碼中
@Autowired MqTemplate taskUpdateMq;
然后我們定義 一個(gè)發(fā)送延遲消息的接口方法
public interface MessageService {
void sendDelayMessage(MqTemplate mqTemplate, String msg, Integer delay);
}@Service
public class MessageServiceImpl implements MessageService {
@Override
public void sendDelayMessage(MqTemplate mqTemplate, String msg, Integer delay) {
mqTemplate.getRabbitTemplate().convertAndSend(mqTemplate.getExchange(), mqTemplate.getRouting_key(), msg, message -> {
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
message.getMessageProperties().setDelay(delay);
message.getMessageProperties().setContentType("application/json");
return message;
});
}
}調(diào)用方法的時(shí)候?qū)qTemplate對(duì)象傳入就好了。
到此這篇關(guān)于SpringBoot整合多個(gè)Mq服務(wù)做法詳解的文章就介紹到這了,更多相關(guān)SpringBoot整合Mq服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深度剖析java中JDK動(dòng)態(tài)代理機(jī)制
本篇文章主要介紹了深度剖析java中JDK動(dòng)態(tài)代理機(jī)制 ,動(dòng)態(tài)代理避免了開發(fā)人員編寫各個(gè)繁鎖的靜態(tài)代理類,只需簡(jiǎn)單地指定一組接口及目標(biāo)類對(duì)象就能動(dòng)態(tài)的獲得代理對(duì)象。2017-04-04
Java如何將任意類型的Object對(duì)象轉(zhuǎn)換為相應(yīng)的實(shí)體對(duì)象
這篇文章主要介紹了Java如何將任意類型的Object對(duì)象轉(zhuǎn)換為相應(yīng)的實(shí)體對(duì)象問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Spring實(shí)戰(zhàn)之容器后處理器操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之容器后處理器操作,結(jié)合實(shí)例形式分析了spring容器后處理器配置、使用操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2019-12-12
Intellij IDEA 關(guān)閉和開啟自動(dòng)更新的提示?
這篇文章主要介紹了Intellij IDEA 關(guān)閉和開啟自動(dòng)更新的提示操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Java多線程高并發(fā)中解決ArrayList與HashSet和HashMap不安全的方案
ArrayList實(shí)現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒有同步,HashMap和Hashtable類似,不同之處在于HashMap是非同步的,并且允許null,關(guān)于HashSet有一件事應(yīng)該牢記,即就條目數(shù)和容量之和來講,迭代是線性的,接下來讓我們?cè)敿?xì)來了解吧2021-11-11
教你使用eclipse?搭建Swt?環(huán)境的全過程
本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Springboot整合Netty實(shí)現(xiàn)RPC服務(wù)器的示例代碼
這篇文章主要介紹了Springboot整合Netty實(shí)現(xiàn)RPC服務(wù)器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Java接口返回省市區(qū)樹形結(jié)構(gòu)的實(shí)現(xiàn)
本文主要介紹了Java接口返回省市區(qū)樹形結(jié)構(gòu)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

