RabbitMq在spring boot中整合和應用
具體如果安裝rabbitmq在本例子中不涉及,主要講解在springboot中如果傳送和接收rabbitmq訊息。
1.新增依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.spring-rabbitmq 配置
本示例中使用了maven的filter
開發環境:
#rabbitMq配置
spring.rabbitmq.addresses=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=/
spring.rabbitmq.exchange=site
spring.rabbitmq.createTopic=dev.gov.site.createormodify
spring.rabbitmq.changeTopic=dev.gov.site.statuschange
在application.properties檔案中:
#rabbitMq配置
spring.rabbitmq.a[email protected]@
[email protected]@
[email protected]@
[email protected]@
[email protected]@
[email protected]@
[email protected]@
[email protected]@
3.使用java配置rabbitmq具體細節
@Configuration
@ComponentScan ("com.trs.comms.amqp")
@ConfigurationProperties(prefix = "spring.rabbitmq")
public class CommsAmqpAutoConfiguration {
private String exchange;
private String createTopic;
private String changeTopic;
//構造ConnectionFactory
@Bean
@ConfigurationProperties(prefix = "spring.rabbitmq")
public ConnectionFactory connectionFactory() {
CachingConnectionFactory factory = new CachingConnectionFactory();
factory.setPublisherConfirms(Boolean.TRUE);
return factory;
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RabbitTemplate rabbitTemplate() {
return new RabbitTemplate(connectionFactory());
}
//指定從哪個exchange接收資料
@Bean
public TopicExchange topicExchange() {
return new TopicExchange(exchange);
}
// 持久化佇列
@Bean
public Queue queue() {
return new Queue("site", true);
}
//繫結佇列,並接收指定topic的資料
@Bean
public Binding bindingCreate() {
return BindingBuilder.bind(queue()).to(topicExchange()).with(createTopic);
}
@Bean
public Binding bindingChange() {
return BindingBuilder.bind(queue()).to(topicExchange()).with(changeTopic);
}
//設定監聽
@Bean
public SimpleMessageListenerContainer messageContainer(ConnectionFactory connectionFactory, AmqpConsumer amqpConsumer) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
container.setQueues(queue());
container.setExposeListenerChannel(true);
container.setMaxConcurrentConsumers(1);
container.setConcurrentConsumers(1);
container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
//設定監聽器,執行具體的業務
container.setMessageListener(amqpConsumer);
return container;
}
public void setExchange(String exchange) {
this.exchange = exchange;
}
public void setCreateTopic(String createTopic) {
this.createTopic = createTopic;
}
public void setChangeTopic(String changeTopic) {
this.changeTopic = changeTopic;
}
}
4.具體監聽器:
/**
* Description: 訊息監聽
*/
@Component
public class AmqpConsumer implements ChannelAwareMessageListener{
private static final Log logger = LogFactory
.getLog(AmqpConsumer.class);
private final AmqpSiteService amqpSiteServiceImpl;
@Autowired
public AmqpConsumer(AmqpSiteService amqpSiteServiceImpl) {
this.amqpSiteServiceImpl = amqpSiteServiceImpl;
}
@Override
public void onMessage(Message message, Channel channel) throws Exception {
try {
//具體業務
amqpSiteServiceImpl.doWithSite(new String(message.getBody(), "UTF-8"));
//手動應答,告訴rabbitmq我業務執行完成,訊息可以丟棄了
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
logger.info("站點同步成功!");
} catch (Exception e) {
throw new RuntimeException("站點同失敗!!" + e);
}
}
}
5.測試用例
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CommsISearchConfiguration.class)
public class AmqpTest {
@Autowired
public RabbitTemplate rabbitTemplate;
@Test
public void testSend() {
String siteData = "{" +
"\"TYPE\": 11," +
"\"DATA\":{" +
"\"HASCHILDREN\":\"true\"," +
"\"OPERTIME\":\"\"," +
"\"CRTIME\":\"2017-06-14 19:22:05\"," +
"\"MEDIATYPE\":\"1\"," +
"\"TRUENAME\":\"劉珍華\"," +
"\"ISSUBSCRIBE\":\"1\"," +
"\"STATUS\":\"0\"," +
"\"DATAPATH\":\"chengdushi1\"," +
"\"MPID\":\"89011234567890\"," +
"\"SCHEDULE\":\"0\"," +
"\"CHNLOUTLINETEMP\":\"641\"," +
"\"ISDISTRIBUTABLE\":\"1\"," +
"\"SITENAME\":\"成都市\"," +
"\"OUTLINETEMPLATE\":\"250\"," +
"\"ATTRIBUTE\":\"PUBLISHLIMIT=&PUBSTARTDATE=\"," +
"\"CHNLDATAPATH\":\"chengdushi2\"," +
"\"PUBLISHPRO\":\"1\"," +
"\"SITEORDER\":\"188\"," +
"\"CLASSIFICATIONID\":\"95\"," +
"\"SITEID\":\"176\"," +
"\"LASTMODIFYTIME\":\"2017-08-31 16:00:35\"," +
"\"SITETYPE\":\"4\"," +
"\"VIEWINFOID\":\"111\"," +
"\"DETAILTEMPLATE\":\"446\"," +
"\"SITEDESC\":\"成都市\"," +
"\"ISMOBILE\":\"0\"," +
"\"PARENTID\":\"0\"," +
"\"ISPUSHABLE\":\"1\"," +
"\"CRUSER\":\"dev\"" +
"}" +
"}";
rabbitTemplate.convertAndSend("site", "dev.gov.site.createormodify", siteData);
}
}
相關推薦
RabbitMq在spring boot中整合和應用
具體如果安裝rabbitmq在本例子中不涉及,主要講解在springboot中如果傳送和接收rabbitmq訊息。 1.新增依賴 <dependency> <groupId>org.springframewor
Spring Boot Dubbo 整合和入門理解
Spring Boot Dubbo 整合和入門理解 1、搭建Dubbo 框架需要用到幾個元件來看一下元件理解以下dubbo 的整個過程 這樣畫大家應該可以看懂吧,下面就來介紹以下各個模組的安裝和使用。 2、zookeeper  
SpringBoot2.0學習筆記:(十) Spring Boot中整合Redis
一、關於Lettuce 關於在SpringBoot2.0.x版本中整合Redis,我們先看一下官方的遷移文件有什麼說的: Spring Boot2.0遷移指南 當你使用spring-boot-starter-redis的時候,Lettuce現已取代Jedis作為Redis驅動
新手入門教程-------Spring Boot中整合RabbitMQ
AMQP:是Advanced Message Queuing Protocol的簡稱,高階訊息佇列協議,是一個面向訊息中介軟體的開放式標準應用層協議。 定義了以下特性: 訊息方向 訊息佇列 訊息路由(包括:點到點和釋出-訂閱模式) 可靠性 安全
SpringBoot2.0學習筆記:(九) Spring Boot中整合Mybatis與Druid
一、專案的搭建 Druid對Spring boot做了很好的適配,所有的工作都只需要在配置檔案中完成。 具體的Druid在Spring Boot中的配置可以看:GitHub文件 首先看一下專案引入的jar包: <dependencies> &
十九、Spring boot中整合mybatis-generator自動生成程式碼
(一)新增外掛 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugi
Spring Boot中整合使用wagger2
Spring Boot中整合使用Swagger2構建RESTful APIs 在之前建立的入門級SpringBoot專案新增swagger2生產介面文件 pom檔案中匯入swagger2的jar包 建立swagger2配置類 其實這個配置類,只要
在Spring Boot中整合Spring Security並自定義驗證程式碼
最終效果 1、實現頁面訪問許可權限制 2、使用者角色區分,並按照角色區分頁面許可權 3、實現在資料庫中儲存使用者資訊以及角色資訊 4、自定義驗證程式碼 效果如下: 1、免驗證頁面 2、登陸頁面 在使用者未登入時,訪問任意有
Spring Boot中整合Sharding-JDBC讀寫分離示例
在我《Spring Cloud微服務-全棧技術與案例解析》書中,第18章節分庫分表解決方案裡有對Sharding-JDBC的使用進行詳細的講解。 之前是通過XML方式來配置資料來源,讀寫分離策略,分庫分表策略等,之前有朋友也問過我,有沒有Spring Boot
spring boot jpa整合和使用講解
1.pom.xml中新增jpa依賴<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte
spring boot 中redis的應用及序列化
1、用處 1.1、作為快取儲存工具,方便檢視快取資料 1.2、做短時間身份認證的儲存工具,例如:token2、用法 2.1在pom.xml中引入依賴 2.2application.properties中的配置3、只做儲存的話直接注入redis模板調取增刪改查
String Boot中@Controller和@RestController的區別?
string type mail term 描述 的區別 dia 1.5 返回 一、@Controller 1、返回JSP、Thymeleaf等templates指定頁面,配合視圖解析器InternalResourceViewResolver一起使用2、方法之前添加@Res
Thymeleaf 模板 在spring boot 中的引用和應用
end text www. bean template har ica ngs sta Thymeleaf是一個java類庫,他是一個xml/xhtml/html5的模板引擎和Struts框架的freemarker模板類似,可以作為mvc的web應用的view層。 Thy
Spring Boot提供Actuator對應用系統的自省和監控的整合功能
Health Indicator訪問無結果 錯誤原因: 未匯入依賴包 版本原因導致訪問方式改變了 解決辦法: 匯入依賴包 <dependency> <groupId>o
Spring Boot 實踐 第六章 Spring data JAP在實際開發中的封裝和應用(上)
上一章簡單介紹了一下Spring boot和Spring Data JPA的整合和簡單使用. 但是在實際開發過程中, 我們發現Spring Data JPA提供的介面太簡單了,這樣就導致需要編寫大量的重複程式碼. 實際上Spring Data JPA提供了很多種擴充套件方
Eclipse中spring boot的安裝和建立簡單的Web應用
1.新增STS外掛 方法一 1.Help -> Eclipse Marketplace… 2.選擇“Popular”標籤去查詢Spring Tool Suite (STS) for Eclipse外掛,找到後線上安裝 方法二 1.He
RabbitMQ入門:在Spring Boot 應用中整合RabbitMQ
在上一篇隨筆中我們認識並安裝了RabbitMQ,接下來我們來看下怎麼在Spring Boot 應用中整合RabbitMQ。 先給出最終目錄結構: 搭建步驟如下: 新建maven工程amqp 修改pom檔案,引入spring-boot-starter-amqp和spring-boot-sta
編寫prometheus的client libraries和在Spring boot中的應用
1 編寫client libraries 有一個關鍵的類Collector,它的collect方法返回零個或多個metric指標和樣本。使用CollectorRegister完成Collector註冊,資料通過CollectorRegister暴露給
spring boot 中PropertiesUtil 工具類的建立和應用
在spring boot 專案中 使用 自定義 PropertyPlaceholderConfigurer會造成 @Vaule 無法正常注入,spring boot 已經有一個預設的實現,所以會造成衝突,在spriing mvc 中可以 使用PropertyPlacehold
Spring Boot中的單元和整合測試
瞭解如何在Spring Boot環境中編寫單元和整合測試,以及在本教程中為此提供便利的工具,本文還會提供一種工具來幫助我們寫單元和整合測試。 1 概述 在這篇文章中,我們將瞭解如何在Spring Boot環境中編寫測試單元和整合。您可以線上找到大量有關此