1. 程式人生 > >RabbitMq在spring boot中整合和應用

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提供了很多種擴充套件方

Eclipsespring 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環境中編寫測試單元和整合。您可以線上找到大量有關此