Spring Cloud Stream RabbitMQ 简单实现

参考官方文档:http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#_rabbitmq_binder

环境:win10 rabbit 默认配置

一、添加依赖

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

二、配置文件

spring:
  application:
    name: rabbitmq-client
  cloud:
    stream:
      bindings:
        chen2018:  #通道名
          destination: chen-test #目的地
  rabbitmq:
    host: localhost
    port: 5672

三、构建消息发送者

  1.先创建通道

public interface ChenService {
  @Output("chen2018")
  MessageChannel chen();

}

  2.扫描接口

@EnableBinding(ChenService.class)

  3.发送消息类

   为了防止中文乱码加了消息头

@RestController
public class TestController {

  @Autowired
  private RabbitTemplate rabbitTemplate;

  @Autowired
  private ChenService chenService;

  @GetMapping("/send")
  public Boolean sendMsg(@RequestParam String msg){
    //获取MessageChanel
    MessageChannel messageChannel = chenService.chen();
    Map<String,Object> headers = new HashMap<>();
    headers.put("charset-encoding","UTF-8");
    headers.put("content-type",MediaType.TEXT_PLAIN_VALUE);
    return messageChannel.send(new GenericMessage<>(msg,headers));
  }
}

四、构建消息订阅者

  1.构建订阅通道

public interface ChenService {
  @Input("chen2018")
  SubscribableChannel chen();
}

  2.扫描接口

@EnableBinding(ChenService.class)

  3.多种编程模型根据实际情况选择

    @Autowired
	private ChenService chenService;

	@PostConstruct
	public void init(){//接口编程
		//获取Subscribe chanel
		SubscribableChannel subscribableChannel = chenService.chen();
		subscribableChannel.subscribe(message -> {
			MessageHeaders headers = message.getHeaders();
			String encoding = (String) headers.get("charset-encoding");
			String text = (String)headers.get("content-type");
			byte[] content = (byte[]) message.getPayload();
			try {
				System.out.println("接收到消息:"+ new String(content,encoding));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		});
	}
	@StreamListener("chen2018")
	public void onMessage(byte[] data){//注解编程
		System.out.println("onMessage(byte[]):"+data);
	}

	@StreamListener("chen2018")
	public void onMessage(String data){//注解编程
		System.out.println("onMessage(String):"+data);
	}

	@ServiceActivator(inputChannel = "chen2018") //Spring Integration注解
	public void onServiceActivator(String data){
		System.out.println("onServiceActivator(String):"+data);
	}

    建议:使用同一种编程模型
    相同的编程模型重复执行,不同的编程模型轮流执行

五、测试结果

访问:http://localhost:8088/send?msg=加油!fighting

猜你喜欢

转载自blog.csdn.net/qq_38423105/article/details/82932743