SpringCloud Stream多源的使用

說明

上次我們使用Amqp包進行MQ多數據源的接入,這次我們換一個包,使用SpringCloud裏的Stream來進行接入。這次的接入方式要看起來更清晰好看一些,不用寫配置Bean,通過bindings、binders、接口配置。

快速開始

引入包(我的Cloud版本爲Greenwich.SR2)

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
            <!-- Kafka使用下面的包 -->
<!--            <artifactId>spring-cloud-starter-stream-kafka</artifactId>-->
        </dependency>

修改application.yml

spring:
  cloud:
    stream:
      bindings:
        # 以下是設置輸入通道及分組和輸出通道及類型
        input1:
          destination: queue1
          content-type: application/json
          # 如果不分組的話,隊列將會是匿名的
          group: group1
          binder: rabbitmq1
        input2:
          destination: queue2
          content-type: application/json
          group: group2
          binder: rabbitmq2
        output1:
          destination: queue3
          content-type: application/json
          binder: rabbitmq3
      binders:
        rabbitmq1:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: xxx.xxx.xxx.xxx
                port: 5672
                username: yunlingfly
                password: password
        rabbitmq2:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: xxx.xxx.xxx.xxx
                port: 5672
                username: yunlingfly
                password: password
        rabbitmq3:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: xxx.xxx.xxx.xxx
                port: 5672
                username: yunlingfly
                password: password

編寫接收MQ的接口

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.SubscribableChannel;

public interface ISourceReceiver {
    String INPUT = "input1";
    String INPUT2 = "input2";

    // 配置在application.yml裏了
    @Input(INPUT)
    SubscribableChannel input();

    @Input(INPUT2)
    SubscribableChannel input2();
}

編寫實現類

import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;

@EnableBinding(value = {ISourceReceiver.class})
public class SourceReceiverImpl {

    @StreamListener(ISourceReceiver.INPUT2)
    public void receiver(String str) {
        System.out.println("數據接收");
    }
}

編寫發送MQ的接口

import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;

public interface ISinkSender {
    String OUTPUT="output1";

    // 在這裏設置輸出通道,配置在application.yml裏
    @Output(OUTPUT)
    MessageChannel output();
}

編寫實現類

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.stereotype.Service;

@Service
public class SinkSenderImpl {
    @Autowired
    ISourceReceiver sinkSender;

    public void sendMessage2() {
        sinkSender.input2().send(MessageBuilder.withPayload("發送數據").build());
    }
}

 

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