• 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);
            }
        }
    }
  • 相关阅读:
    IOS开发系列之阿堂教程:玩转IPhone客户端和Web服务端交互(客户端)实践
    详解基于linux环境MySQL搭建与卸载
    详解Redis基本命令
    浅谈基于Linux的Redis环境搭建
    浅谈Linux基本命令
    浅谈基于Intellij IDEA Maven的配置与使用
    浅谈SpringMVC执行过程
    浅析关于java的一些基础问题(上篇)
    软件架构应关心的若干要素
    详解mybatis映射配置文件
  • 原文地址:https://www.cnblogs.com/skorzeny/p/12199105.html
Copyright © 2020-2023  润新知