Java Spring Boot 整合RabbitMQ(一):Hello World -B2B2C小程式電子商務
Spring Boot 整合
環境:
RabbitMQ:3.7.4
Spring Boot:2.0.1.RELEASE
因為有 Starter POMs,在 Spring Boot 中整合 RabbitMQ 是一件非常容易的事,其中的 AMQP 模組就可以很好的支援 RabbitMQ。
我們可以使用 Spring Intializr 或 建立一個 Spring Boot 工程,並勾選 RabbitMQ。
或者手動在 pom.xml 檔案中加入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
在 application.yml 中配置關於 RabbitMQ 的連線和使用者資訊,如果沒有改 RabbitMQ 的預設配置的話,這裡零配置即可啟動。這裡我們還定義了一些額外的配置備用。
spring: profiles: active: usage_message rabbitmq: port: 5672 tutorial: client: duration: 10000
生產者
Spring AMQP 讓我們用少量的程式碼就能輕鬆實現訊息的傳送和接收。透過注入 AmqpTemplate 介面的例項來實現訊息的傳送,AmqpTemplate 介面定義了一套針對 AMQP 協議的基礎操作。在 Spring Boot 中會根據配置來注入其具體實現 (AmqpTemplate 的預設實現就是 RabbitTemplate)。
public class Tut1Sender { @Autowired private AmqpTemplate template; @Autowired private Queue queue; /** * 用定時任務來模擬生產者定時傳送訊息 */ @Scheduled (fixedDelay = 1000, initialDelay = 500) public void send() { String message = "Hello World!" + new Date(); template.convertAndSend(queue.getName(), message); System.out.println(" [x] Sent '" + message + "'"); } }
在該生產者中,我們會產生一個字串,併傳送到名為”hello-world” 的佇列中。
消費者
建立消費者 Receiver。透過 @RabbitListener 註解定義該類對”hello-world” 佇列的監聽,並用 @RabbitHandler 註解來指定對訊息的處理方法。所以,該消費者實現了對”hello-world” 佇列的消費,消費操作為輸出訊息的字串內容。
@RabbitListener(queues = "hello-world") public class Tut1Receiver { @RabbitHandler public void receive(String in) { System.out.println(" [x] Received '" + in + "'"); } }
配置類
建立一個新的 JavaConfig 檔案
@Profile({"tut1", "hello-world"}) @Configuration public class Tut1Config { @Bean public Queue queue() { return new Queue("hello-world"); } @Profile("receiver") @Bean public Tut1Receiver receiver() { return new Tut1Receiver(); } @Profile("sender") @Bean public Tut1Sender sender() { return new Tut1Sender(); } }
在上面的 JavaConfig 中,我們使用 @Configuration 讓 Spring 知道這是一個 Java 配置,並定義了生產者、消費者和一個名為”hello-world” 的佇列。並且,我們使用 Spring Profiles 來控制它執行哪個示例,以及它是生產者還是消費者,這樣我們就可以簡單的透過啟動引數傳遞我們的配置檔案來正確的啟動應用了。瞭解springcloud架構可以加求求:三五三六二四七二五九
至於具體的生產者(Tut1Sender)和消費者(Tut1Receiver),我們這裡僅先定義出來,稍後再具體實現。
應用主類
再小小的改造一下生成的 RabbitmqTutorialApplication.java
@SpringBootApplication @EnableScheduling public class RabbitmqTutorialApplication { public static void main(String[] args) { new SpringApplicationBuilder() .sources(RabbitmqTutorialApplication.class) // 設定成非 web 環境 .web(WebApplicationType.NONE) .run(args); } @Profile("usage_message") @Bean public CommandLineRunner usage() { return arg0 -> { System.out.println("This app uses Spring Profiles to control its behavior.\n"); System.out.println("Sample usage: java -jar target/rabbitmq-tutorial-0.0.1-SNAPSHOT.jar --spring.profiles.active=hello-world,sender"); }; } @Profile("!usage_message") @Bean public CommandLineRunner tutorial() { return new RabbitTutorialRunner(); } }
這裡我將環境設定為了 WebApplicationType.NONE,即非 WEB 環境,因為預設的話 Netty 會監聽 8080 埠,同時執行的話就會介面衝突導致啟動失敗(當然,也可以直接在啟動時用引數繫結不同的埠以避免衝突)。
其中的 RabbitTutorialRunner 如下
public class RabbitTutorialRunner implements CommandLineRunner { @Value("${tutorial.client.duration:0}") private int duration; @Autowired private ConfigurableApplicationContext ctx; @Override public void run(String... args) throws Exception { System.out.println("Ready ... running for " + duration + "ms"); Thread.sleep(duration); ctx.close(); } }
這個 Runner 主要是為了阻止主執行緒退出。除了用 Thread.sleep(millisecond),也可以用 CountDownLatch 來達到相同的目的。
執行
編譯
mvn clean package -Dmaven.test.skip=true
執行
java -jar target/rabbitmq-tutorial-0.0.1-SNAPSHOT.jar --spring.profiles.active=tut1,sender
java -jar target/rabbitmq-tutorial-0.0.1-SNAPSHOT.jar --spring.profiles.active=tut1,receiver
輸出
// Sender
Ready … running for 10000ms
[x] Sent ‘Hello World!Thu Apr 12 16:56:01 CST 2018’
[x] Sent ‘Hello World!Thu Apr 12 16:56:03 CST 2018’
[x] Sent ‘Hello World!Thu Apr 12 16:56:04 CST 2018’
…
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952307/viewspace-2678696/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java Spring boot 整合RabbitMQ(五):主題(Topics)-B2B2C小程式電子商務JavaSpring BootMQ
- Java Spring boot 整合RabbitMQ(三):(Publish/Subscribe)-B2B2C小程式電子商務JavaSpring BootMQ
- Java Spring boot 整合RabbitMQ(二):工作佇列(Work queues)-B2B2C小程式電子商務JavaSpring BootMQ佇列
- Java Springboot整合RabbitMQ(六):(RPC)-b2b2c小程式電子商務JavaSpring BootMQRPC
- Java Springboot 整合RabbitMQ(四):路由(Routing)-B2B2C小程式電子商務JavaSpring BootMQ路由
- spring boot(一)hello worldSpring Boot
- JAVA spring cloud boot b2b2c電子商務分散式微服務JavaSpringCloudboot分散式微服務
- spring boot(一)hello world 搭建Spring Boot
- java Spring Cloud b2b2c o2o 電子商務 Eureka【Finchley 版】-b2b2c小程式電子商務JavaSpringCloud
- java版 spring cloud spring boot mybatis實現 b2b2c 多商戶電子商務平臺JavaCloudSpring BootMyBatis
- [第七篇]——Docker Hello World之Spring Cloud直播商城 b2b2c電子商務技術總結DockerSpringCloud
- SpringCloud分散式微服務b2b2c電子商務(十三)Springboot整合RabbitMQGCCloud分散式微服務Spring BootMQ
- RabbitMQ tutorial - "Hello world!"MQ
- Spring Boot整合rabbitmqSpring BootMQ
- Spring Boot 整合 rabbitmqSpring BootMQ
- JAVA商城 B2B2C商城系統 小程式 電子商務 springcloud商城JavaSpringGCCloud
- RabbitMQ 入門 - Hello WorldMQ
- spring cloud spring boot 構建java版 分散式微服務 b2b2c o2o電子商務雲商平臺CloudSpring BootJava分散式微服務
- 從零搭建Spring Boot的Hello WorldSpring Boot
- spring cloud構建java版 b2b2c電子商務雲商平臺SpringCloudJava
- Spring BOOT 整合 RabbitMq 實戰操作(一)Spring BootMQ
- SpringCloud分散式微服務b2b2c電子商務-Spring Boot配置檔案詳解GCCloud分散式微服務Spring Boot
- (十四)JAVA springboot微服務b2b2c電子商務系統- Spring Cloud構建分散式電子商務平臺JavaSpring Boot微服務Cloud分散式
- spring boot-整合RabbitMq(RabbitMq基礎)Spring BootMQ
- Springcloud分散式微服務b2b2c電子商務一整合Hystrix(二)SpringGCCloud分散式微服務
- Spring Boot 整合 RabbitMQ 訊息事務(消費者)Spring BootMQ
- 電子商務Java微服務 SpringBoot整合SpringSecurityJava微服務Spring BootGse
- JAVA b2b2c電子商務SpringCloud分散式微服務spring-security-基本JavaSpringGCCloud分散式微服務
- java B2B2C原始碼電子商務平臺---大話Spring CloudJava原始碼SpringCloud
- 每日一學:如何在 Spring Boot 整合 RabbitMQ ?Spring BootMQ
- spring cloud+spring boot 電子商務-spring boot 引用方式${}和@@用法與區別CloudSpring Boot
- java B2B2C原始碼電子商務平臺Java原始碼
- RabbitMQ(三):RabbitMQ與Spring Boot簡單整合MQSpring Boot
- 【Java】Hello worldJava
- spring cloud+spring boot 電子商務spring boot獲取配置檔案的屬性CloudSpring Boot
- java B2B2C 仿淘寶電子商城系統-Spring Cloud構建分散式電子商務平臺JavaSpringCloud分散式
- spring-boot-route(十三)整合RabbitMQSpringbootMQ
- Next.js+Spring boot開源電子商務專案JSSpring Boot