SpringCloud Stream消息驅動之消費者

本文演示是的SpringCloud Stream的消息生產者,和RabbitMQ進行配合,基本上與生產者一樣

1、構建生產者項目cloud-stream-rabbitmq-consumer8802,添加pom文件依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>
        <!--基礎配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2、構建application.yml文件,與生產者不同的地方就是需要將bindings的output在消費端修改成input

server:
  port: 8802

spring:
  application:
    name: cloud-stream-rabbitmq-consumer
  cloud:
    stream:
      binders: # 在此處配置要綁定的rabbitmq的服務信息;
        defaultRabbit: # 表示定義的名稱,用於於binding整合
          type: rabbit # 消息組件類型
          environment: # 設置rabbitmq的相關的環境配置
            spring:
              rabbitmq:
                host: localhost
                port: 5672
                username: admin
                password: admin
                virtual_host: my_vhost
      bindings: # 服務的整合處理
        input: # 這個名字是一個通道的名稱
          destination: studyExchange # 表示要使用的Exchange名稱定義
          content-type: application/json # 設置消息類型,本次爲json,文本則設置“text/plain”
          binder: defaultRabbit # 設置要綁定的消息服務的具體設置

eureka:
  client: # 客戶端進行Eureka註冊的配置
    service-url:
      defaultZone: http://localhost:7001/eureka
  instance:
    lease-renewal-interval-in-seconds: 2 # 設置心跳的時間間隔(默認是30秒)
    lease-expiration-duration-in-seconds: 5 # 如果現在超過了5秒的間隔(默認是90秒)
    instance-id: receive-8802.com  # 在信息列表時顯示主機名稱
    prefer-ip-address: true     # 訪問的路徑變爲IP地址

3、構建主啓動類

/**
 * created by king on 2020/4/28 3:50 下午
 */
@SpringBootApplication
public class StreamConsumerMain8002 {
    public static void main(String[] args) {
            SpringApplication.run(StreamConsumerMain8002.class,args);
        }
}

4、構建一個controller,來接收rabbitmq的產生的消息,需要用到註解@Component、@EnableBinding(Sink.class)、@StreamListener(Sink.INPUT)

package com.king.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;

/**
 * created by king on 2020/4/28 3:53 下午
 */
@Component
@EnableBinding(Sink.class)
public class StreamConsumerReceiveMessageListnerController {
    @Value("${server.port}")
    private String serverPort;
    
    @StreamListener(Sink.INPUT)
    public void input(Message<String>message){
        System.out.println("我是消費者1號,接收到的消息爲:"+message.getPayload()+"\t 端口號爲:"+serverPort);
    }
}

5、啓動RabbitMQ、eureka7001、provider8801、consumer8802,然後訪問8801,產生消息,而8802的控制檯也會收到消息

 

到此,消息驅動的消費者也搭建完畢了,接下來下面這篇文章會從消息重複、分組消費和消息持久化方面來做幾個測試~有興趣的就移步下一篇

 

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