65、SpringCloudStream:消息生产者、消费者入门案例

1、安装RabbitMQ

65、SpringCloudStream:消息生产者、消费者入门案例_第1张图片

2、创建消息生产者(steam_producer)、消息消费者(stream_consumer)模块

65、SpringCloudStream:消息生产者、消费者入门案例_第2张图片
65、SpringCloudStream:消息生产者、消费者入门案例_第3张图片
65、SpringCloudStream:消息生产者、消费者入门案例_第4张图片

3、在两个模块中引入坐标

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

4、生产者配置文件

server:
  port: 7001 #服务端口
spring:
  application:
    name: stream_producer #指定服务名
  rabbitmq:
    addresses: 127.0.0.1
    username: guest
    password: guest
  cloud:
    stream:
      bindings:
        output:     #管道
          destination: itcast-default  #指定消息发送的目的地,在rabbitmq中,发送到一个itcast-default的exchange(交换机)中
      binders:  #配置绑定器 
        defaultRabbit:
          type: rabbit

5、启动类里面配置发送

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;

/**
 * 入门案例:
 *      1.引入依赖
 *      2.配置application.yml文件
 *      3.发送消息的话,定义一个通道接口,通过接口中内置的messagechannel
 *              springcloudstream中内置接口  Source
 *      4.@EnableBinding : 绑定对应通道
 *      5.发送消息的话,通过MessageChannel发送消息
 *          * 如果需要MessageChannel --> 通过绑定的内置接口获取
 */
@SpringBootApplication
@EnableBinding(Source.class)
public class ProducerApplication implements CommandLineRunner{
    @Autowired
    private MessageChannel output;
    @Override
    public void run(String... args) throws Exception {
        //发送MQ消息
        //messageBuilder:工具类:创建消息
        output.send(MessageBuilder.withPayload("hello world").build());
   }
	public static void main(String[] args) {
		SpringApplication.run(ProducerApplication.class);
	}
}

65、SpringCloudStream:消息生产者、消费者入门案例_第5张图片
65、SpringCloudStream:消息生产者、消费者入门案例_第6张图片

5、消费者模块配置文件

server:
  port: 7002 #服务端口
spring:
  application:
    name: rabbitmq-consumer #指定服务名
  rabbitmq:
    addresses: 127.0.0.1
    username: guest
    password: guest
  cloud:
    stream:
      bindings:
        input: #内置的获取消息的通道 , 从itcast-default中获取消息
          destination: itcast-default
      binders:
        defaultRabbit:
          type: rabbit

6、在消费者模块写一个测试类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 1.引入依赖
 * 2.配置application.yml
 * 3.需要配置一个通道的接口
 *    内置获取消息的通道接口 sink
 * 4.绑定通道
 * 5.配置一个监听方法 : 当程序从中间件获取数据之后,执行的业务逻辑方法
 *      需要在监听方法上配置@StreamListener
 */
@SpringBootApplication
@EnableBinding(Sink.class)
public class ConsumerApplication {

 // 监听 binding 为 Sink.INPUT 的消息
    @StreamListener(Sink.INPUT)
    public void input(String message) {
        System.out.println("获取到消息:" + message);
   }

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

7、测试

1、启动消息消费者模块
2、消息生产者重新启动
3、查看消息消费者控制台,可以看到:”获取到消息:hello world“

你可能感兴趣的:(65、SpringCloudStream:消息生产者、消费者入门案例)