本文演示是的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的控制檯也會收到消息
到此,消息驅動的消費者也搭建完畢了,接下來下面這篇文章會從消息重複、分組消費和消息持久化方面來做幾個測試~有興趣的就移步下一篇