Spring cloud Stream 入門Demo,結合rabbitMQ,實現發佈-訂閱功能。

        網上有很多關於Spring cloud stream的介紹,這裏我就不贅述了。我在學習這個Spring cloud stream時,也是學習着別人的博客,跟着別人的博客搭着Demo,一步步瞭解這個玩意,但是,作爲博客博主,總會漏掉一些博主想當然的東西,覺得不需要贅述的東西,這恰恰是初學者爲何有時跟着博客搭個“hello world”級別的demo時卻總是碰壁,從而變得暴躁。因此我在這裏將我碰到的一些坑,我的解決思路,一一記錄下來,希望對同樣碰到這些坑的你能夠有所幫助。

       入門Demo,搭建了兩個spring boot 項目,各自實現發佈(spring-cloud-stream-binding-output)、訂閱(spring-cloud-stream-binding-input)這倆功能,通俗講就是一個服務發信息,另一個服務接受信息這樣子。只不過使用了rabbitmq這個服務器的消息隊列進行支持。



首先,第一個項目,創建訂閱項目。

新建一個spring boot項目,項目名爲:spring-cloud-stream-binding-input

pom.xml文件中主要依賴如下:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-stream</artifactId>
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

application.properties文件內容如下:

server.port=8080

spring.cloud.stream.bindings.input.destination=sink-channel

spring.cloud.stream.binders.defaultRabbit.type=rabbit
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.host=192.168.25.130
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.port=5672
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.username=admin
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.password=admin

這裏需要說明一下的是,關於第三行~第七行,這五行配置的是連接rabbitmq的地址、端口、用戶名和密碼。這裏需要說明的是,如果不配置這些內容也是可以的,只不過他會默認的rabbitmq設置,他會連接localhost下5672端口的rabbitmq服務,賬號密碼也不知道是什麼鬼東西(反正控制檯沒打)。剛學習的時候,我就納悶了,因爲不起作用,乍看一下才知道,連接了localhost的rabbitmq,可我本地沒有搭建rabbitMq啊,於是又在linux系統上搭了一個rabbitmq服務器(具體搭建可以搜索其他文章),配置好了之後,在項目裏設置一下我rabbitmq服務器的相關信息,就可以連上去了。

另外,這裏說個題外話,rabbitMQ搭建在linux上後,注意他是默認開啓5672端口的。所以要麼就開啓一下5672端口,要麼像我一樣,因爲是自己電腦虛擬機搭建的,所以就乾脆把防火牆給關了。然後可以試着用瀏覽器訪問  ip:15672  ,我這裏是訪問192.168.25.130:15672就進入rabbitMQ的webUI界面了。成功就說明可以連接rabbitMQ。

接着講這個訂閱項目~

在項目的主類:  SpringCloudStreamBindingInputApplication.java中

@SpringBootApplication
@EnableBinding(Sink.class)
public class SpringCloudStreamBindingInputApplication {

   private static Logger logger = LoggerFactory.getLogger(SpringCloudStreamBindingInputApplication.class);

   public static void main(String[] args) {
      SpringApplication.run(SpringCloudStreamBindingInputApplication.class, args);
   }

   @StreamListener(Sink.INPUT)
   public void sinkMessage(Object message) {
      logger.info("received message:" + message.toString());
   }
}

以上,就把訂閱項目做好了。詳細註解的用法搜索其他博客文章應該會講述。


第二步:搭建發佈項目,項目名爲:spring-cloud-stream-binding-output


pom.xml文件與上個項目相同,


application.properties文件也與上個項目相同,只不過添加一個屬性:

fixedDelay: 5000   #設置繼上一個任務之後,延時時間間隔


然後啓動類:SpringCloudStreamBindingOutputApplication.java文件內容爲:

@SpringBootApplication
@EnableBinding(Source.class) // 該註解用來綁定輸出的管道,進行消息推送。本案例就推送格式化的時間
public class SpringCloudStreamBindingOutputApplication {

   private static Logger logger = LoggerFactory.getLogger(SpringCloudStreamBindingOutputApplication.class);

   public static void main(String[] args) {
      SpringApplication.run(SpringCloudStreamBindingOutputApplication.class, args);
   }

   @InboundChannelAdapter(value = Source.OUTPUT)
   public String timerMessageSource() {
      String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
      logger.info("publish message: " + format);
      return format;
   }
}

這裏通過發送當前時間作爲消息主體。


測試:

依次啓動spring-cloud-stream-binding-input、spring-cloud-stream-binding-output項目。

然後便可以看到兩個項目的控制檯交替打印消息:


以下爲input項目控制檯信息。



以下爲output項目控制檯信息:


可以看到,都有“Attempting to connect to: [192.168.25.130:5672]”的信息,這裏可以確認你所訪問的rabbitMQ是否配置是正確的。其次便是日期消息的相互交替輸出,說明結果無誤。


另外,我這裏用瀏覽器訪問 192.168.25.130:15672便可以登錄rabbitMQ的圖形化界面去查看消息隊列和連接的情況。





這裏讓我比較納悶的是,命名只開了發佈和訂閱兩個項目,莫名其妙出現了三個連接。真是神奇。。都不知道是怎麼回事。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章