springcloudstream

BillingMessageListener
package cn.enjoy.listener;

import cn.enjoy.BillingChannel;
import cn.enjoy.BillingMessage;
import cn.enjoy.channel.DefaultProcess;
import cn.enjoy.vo.Product;
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;

@Component
@EnableBinding(BillingChannel.class)
public class BillingMessageListener {

    @StreamListener(BillingChannel.INPUT)
    public void input(Message<BillingMessage> message) {
        System.err.println("【*** 消息接收 ***】" + message.getPayload());
    }
}
BillingMessageProvider
package cn.enjoy.provider;


import cn.enjoy.BillingChannel;
import cn.enjoy.BillingMessage;
import cn.enjoy.channel.DefaultProcess;
import cn.enjoy.vo.Product;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;

import javax.annotation.Resource;

@EnableBinding(BillingChannel.class)
public class BillingMessageProvider {
    @Resource
    @Qualifier("billing_output")
    private MessageChannel output;  // 消息的发送管道

    public void send(BillingMessage message) {
        output.send(MessageBuilder.withPayload(message).build());
    }
}
BillingChannel
package cn.enjoy;

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

public interface BillingChannel {
    public static final String OUTPUT = "billing_output"; // 输出通道名称

    public static final String INPUT = "billing_input"; // 输入通道名称

    @Input(BillingChannel.INPUT)
    public SubscribableChannel input();

    @Output(BillingChannel.OUTPUT)
    public MessageChannel output();
}

application.yml

server:
  port: 6000

spring:
  cloud:
    stream:
       rabbit:
          bindings:
            billing_input:
              consumer:
                bindingRoutingKey: billingKey # 设置一个RoutingKey信息
            billing_output:
              producer:
                routingKeyExpression: '''billingKey'''
       binders: # 在此处配置要绑定的rabbitmq的服务信息;
          defaultRabbit: # 表示定义的名称,用于于binding整合
            type: rabbit # 消息组件类型
            environment: # 设置rabbitmq的相关的环境配置
              spring:
                rabbitmq:
                   addresses: localhost
                   port: 5672
                   username: guest
                   password: guest
                   virtual-host: /
       bindings: # 服务的整合处理
          billing_input: # 这个名字是一个通道的名称,在分析具体源代码的时候会进行说明
            destination: BillingExchange # 表示要使用的Exchange名称定义
            content-type: application/json # 设置消息类型,本次为对象json,如果是文本则设置“text/plain”
            binder: defaultRabbit # 设置要绑定的消息服务的具体设置
            group:  enjoy_group
          billing_output: # 这个名字是一个通道的名称,在分析具体源代码的时候会进行说明
            destination: BillingExchange # 表示要使用的Exchange名称定义
            content-type: application/json # 设置消息类型,本次为对象json,如果是文本则设置“text/plain”
            binder: defaultRabbit # 设置要绑定的消息服务的具体设置
  application:
    name: microcloud-stream-provider-consumer

 

TestMessageProvider
package test;

import cn.enjoy.BillingMessage;
import cn.enjoy.StreamApp;
import cn.enjoy.provider.BillingMessageProvider;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.Date;

@SpringBootTest(classes = StreamApp.class)
@RunWith(SpringRunner.class)
public class TestMessageProvider {

    @Resource
    private BillingMessageProvider messageProvider;

    @Test
    public void testSend() {
        for (int i = 0; i < 10; i++) {
            BillingMessage message = new BillingMessage();
            message.setAccountId("sss" + i);
            message.setStartTime(new Date());
            message.setEndTime(new Date());
            messageProvider.send(message);
        }
    }
}

 

posted @ 2020-01-15 22:26  skorzeny  阅读(158)  评论(0编辑  收藏  举报