SpringCloud Stream消息驱动之生产者

32 篇文章 0 订阅
8 篇文章 1 订阅

所有代码都在github上:https://github.com/demonruin/cloud2020/tree/master

 

本文演示是的SpringCloud Stream的消息生产者,和RabbitMQ进行配合

1、构建生产者项目cloud-stream-rabbitmq-provider8801,添加pom文件依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2、构建application.yml文件,添加rabbitmq和output配置

server:
  port: 8801

spring:
  application:
    name: cloud-stream-rabbitmq-provider
  cloud:
    stream:
      binders: # 在此处配置要绑定的rabbitmq的服务信息;
        defaultRabbit: # 表示定义的名称,用于于binding整合
          type: rabbit # 消息组件类型
          environment: # 设置rabbitmq的相关的环境配置
            spring:
              rabbitmq:
                host: localhost
                port: 5672
                username: admin
                password: admin
                virtual-host: my_vhost
      bindings: # 服务的整合处理
        output: # 这个名字是一个通道的名称
          destination: studyExchange # 表示要使用的Exchange名称定义
          content-type: application/json # 设置消息类型,本次为json,文本则设置“text/plain”
          binder: defaultRabbit  # 设置要绑定的消息服务的具体设置



eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #单机
      defaultZone: http://localhost:7001/eureka
      # 集群
      #defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

3、构建主启动类

@SpringBootApplication
public class StreamRabbitProviderMain8801 {
    public static void main(String[] args) {
            SpringApplication.run(StreamRabbitProviderMain8801.class,args);
        }
}

4、构建业务类,写一个测试接口

/**
 * created by king on 2020/4/28 1:22 下午
 */
public interface IMessageProviderService {
    public String send();
}

5、实现此接口,并添加相关注解和构建消息,可参见官网配置springcloud stream producer官网配置书写

package com.king.springcloud.service.impl;

import com.king.springcloud.service.IMessageProviderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.MessageChannel;

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

/**
 * created by king on 2020/4/28 1:23 下午
 */
@EnableBinding(Source.class)//定义消息的推送管道
@Slf4j
public class MessageProviderServiceImpl implements IMessageProviderService {
    @Resource
    private MessageChannel output; //消息发送管道

    @Override
    public String send() {
        String serial = UUID.randomUUID().toString();
        output.send(MessageBuilder.withPayload(serial).build());
        log.info("*******serial:"+serial);
    return null;
    }
}

6、提供接口,共外部访问生产消息


/**
 * created by king on 2020/4/28 1:39 下午
 */
@RestController
public class StreamSendMessageController {

    @Resource
    private IMessageProviderService messageProviderService;

    @GetMapping(value = "/sendMsg")
    public String sendMsg(){
        return messageProviderService.send();
    }
}

7、启动RabbitMQ服务,启动eureka7001,启动provider8801项目,进行测试 http://localhost:8801/sendMsg

结果:

后台打印出日志信息 显示随机字符串

RabbitMQ的web端,也能看到消息响应波峰

表示提供者能发送消息到RabbitMQ了~

!!~~~~~~!!!!!!!!!!!!!!!!!!

此处其实还有个问题,就是我8801项目虽然启动了,消息也生产到RabbitMQ了,但是我的8801项目后台是报错的,报:ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN 错误

网上搜索是说 账户和密码不对,但是我用同样的账户和密码 admin/admin都能登录web页面,而且前边用SpringCloud Bus的时候,也是使用的同样的RabbitMQ,都没有问题,到这儿里就报这个错误了,也不知道是哪儿的问题~~先记录下吧~~!

 

如果有朋友能知道原因,请留言~~

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值