SpringCloudストリームRabbitMQ

依存紹介

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

MQ接続プロパティを構成する

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

モデルプロセッサ

  • 定数クラス
// 定中的常量
    public static final String SEND_MSG = "sendmsg";
    public static final String RECEIVED_MSG = "receivedmsg";
  • 模倣インターフェースorg.springframework.cloud.stream.messaging.Processor
public interface StreamClient {

    @Input(Constant.SEND_MSG)
    SubscribableChannel input();

    @Output(Constant.SEND_MSG)
    MessageChannel output();

メッセージを送る

  • ここはコントローラで書かれていますが、テストクラスでも書くことができます
package com.cloud.order.controller;

import com.cloud.order.msg.StreamClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
@RestController
public class SendMsg {

    @Autowired
    private StreamClient streamClient; // 自己定义的StreamClient

    @RequestMapping("/sendmsg")
    public void sendMsg() {
        String msg = "hello " + new Date();
        streamClient.output().send(MessageBuilder.withPayload(msg).build());
    }
}

メッセージを受信

@Component
@EnableBinding(StreamClient.class)//定义好的接口
@Slf4j
public class StreamReceiver {

    @StreamListener(Constant.SEND_MSG) // 监听的消息队列
    public  String  process(Object val){
        log.info("StreamReceiver msg"+ val);
        return "received msg "+new Date().getTime();
    }
}

消費後にメッセージを返す

@Component
@EnableBinding(StreamClient.class)
@Slf4j
public class StreamReceiver {

    @StreamListener(Constant.SEND_MSG)
    @SendTo(Constant.RECEIVED_MSG) //返回给的队列,创建方式同上
    public  String  process(Object val){
        log.info("StreamReceiver msg"+ val);
        return "received msg "+new Date().getTime();
    }

    @StreamListener(Constant.RECEIVED_MSG)
    public  void  processReceiver(Object val){
        log.info("received msg -- --"+ val);
    }
}

その他の

複数のインスタンス、1つのインスタンスのみがメッセージを受信できます

  • プロフィールに追加
# 仅让一个实例接收到消息,msg-是程序中定义的队列名字,order-根据语义自定义即可
spring.cloud.stream.bindings.msg.group=order

オブジェクトタイプのメッセージを送信し、MQで未使用のメッセージを表示する

# 可在消息队列中看到堆积的消息的(当消息为对象格式时)完整属性,msg-是程序中定义的队列名字
spring.cloud.stream.bindings.msg.content-type=application/json

おすすめ

転載: www.cnblogs.com/VVII/p/12654205.html