實戰背景 RabbitMQ實戰第一階段-RabbitMQ的官網拜讀已經結束了,相信諸位童鞋或多或少都能入了個門,若是仍是以爲迷迷糊糊似懂非懂的,那我建議諸位能夠親自去拜讀拜讀官網的技術手冊或者看多幾篇個人視頻跟源碼!由於接下來咱們將進入第二階段,即應用實戰階段mysql
實戰分析 應用實戰,固然是指真正的在企業級項目中的應用。在這一階段中,我將以目前流行的微服務架構爲奠定,整合RabbitMQ實現項目中常見的一些業務模塊並解決微服務系統或者分佈式系統一些常見的問題。其中微服務框架將採用SpringBoot,實體映射框架將採用Mybatis,搭建一個企業級微服務項目,並以此來實戰RabbitMQ涉及的各大技術點!git
實戰交流 在學習過程當中,若是有相關問題,能夠加我我的QQ:1974544863或者文末掃碼加我我的微信進行交流,另外,感興趣的童鞋能夠加微信公衆號,會不定時推送乾貨哦!web
實戰歷程 從這一階段開始,我將更換一下IDE爲IDEA,固然啦,若是你想用eclipse,其實也是沒多大問題的!那就讓咱們開始吧。spring
2.下面咱們就構建一個企業級的微服務項目吧。在其中咱們須要加入rabbitmq,mysql,druid以及log4j等的jar包依賴,並構建好包目錄結構,以後,咱們建立一個數據庫以及一個表「order_record」即訂單記錄表吧。相關的截圖以下所示(相關源碼在文末有提供下載,視頻教程能夠文末加微信諮詢所取!) sql
3.在後續文章分享以及視頻教程中涉及到的源碼實戰將以本篇博文搭建的項目作爲奠定!數據庫
4.接下來爲了測試項目搭建後是否能夠運行,咱們須要基於mvc三層模式開發一下簡單的功能,首先固然是寫個HelloWorldController,寫個hello world請求方法,而後將項目跑起來,postman模擬一下請求,看看是否返回指定的數據。以下所示: 微信
5.若是以爲上面的測試太簡單了,那能夠把上面的表 order_record 用mybatis逆向工程生成相應的mapper以及mapper.xml,而後也是在同個controller中寫個請求方法:返回全部的訂單列表,以下所示: mybatis
6.最後是核心重點的RabbitmqConfig的配置,做爲RabbitMQ的全局配置架構
@Configuration
public class RabbitmqConfig {
private static final Logger log= LoggerFactory.getLogger(RabbitmqConfig.class);
@Autowired
private Environment env;
@Autowired
private CachingConnectionFactory connectionFactory;
@Autowired
private SimpleRabbitListenerContainerFactoryConfigurer factoryConfigurer;
/**
* 單一消費者
* @return
*/
@Bean(name = "singleListenerContainer")
public SimpleRabbitListenerContainerFactory listenerContainer(){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setConcurrentConsumers(1);
factory.setMaxConcurrentConsumers(1);
factory.setPrefetchCount(1);
factory.setTxSize(1);
return factory;
}
/**
* 多個消費者
* @return
*/
@Bean(name = "multiListenerContainer")
public SimpleRabbitListenerContainerFactory multiListenerContainer(){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factoryConfigurer.configure(factory,connectionFactory);
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setAcknowledgeMode(AcknowledgeMode.NONE);
factory.setConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.concurrency",int.class));
factory.setMaxConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.max-concurrency",int.class));
factory.setPrefetchCount(env.getProperty("spring.rabbitmq.listener.prefetch",int.class));
return factory;
}
@Bean
public RabbitTemplate rabbitTemplate(){
connectionFactory.setPublisherConfirms(true);
connectionFactory.setPublisherReturns(true);
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMandatory(true);
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
log.info("消息發送成功:correlationData({}),ack({}),cause({})",correlationData,ack,cause);
}
});
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
log.info("消息丟失:exchange({}),route({}),replyCode({}),replyText({}),message:{}",exchange,routingKey,replyCode,replyText,message);
}
});
return rabbitTemplate;
}
複製代碼
6.如此一來,整個項目的搭建基本上沒有多大問題了。所謂工欲善其事必先利其器,有了項目作爲奠定,那麼就闊以進行後面的全部實戰了!併發
實戰總結:基於SpringBoot的微服務項目基本上整合搭建好了,接下來就有了後續各大業務模塊以及技術點的實戰奠定,學習過程若是有相關問題,能夠加文中提供的聯繫方式進行技術交流!另外,最近我將SpringBoot整合RabbitMQ一系列文章的精華進行了抽取,併發起了一場gitchat交流會,歡迎你們來交流!掃一掃下面的二維碼便可進入哦
另外,相關文章也會同步在微信公衆號發佈哦,歡迎關注!學習過程若是有相關問題能夠加QQ:1974544863或者QQ羣:583522159 進行交流
附註:最近正值分享季,debug本着追求技術,熱愛分享的信念,特意下降了學習門檻,幾乎低價分享給廣大童鞋學習! SpringBoot整合RabbitMQ完整視頻教程學習地址->連接:pan.baidu.com/s/1bB67VCEx… 密碼:gazq 這纔是正版的連接地址,其餘全部的連接或者高價騙取費用的都是盜版的,並且debug我是有提供學習過程技術交流的:QQ-1974544863 !!歡迎廣大學員學習交流!