Spring cloud Stream 入门Demo,结合rabbitMQ,实现发布-订阅功能。

        网上有很多关于Spring cloud stream的介绍,这里我就不赘述了。我在学习这个Spring cloud stream时,也是学习着别人的博客,跟着别人的博客搭着Demo,一步步了解这个玩意,但是,作为博客博主,总会漏掉一些博主想当然的东西,觉得不需要赘述的东西,这恰恰是初学者为何有时跟着博客搭个“hello world”级别的demo时却总是碰壁,从而变得暴躁。因此我在这里将我碰到的一些坑,我的解决思路,一一记录下来,希望对同样碰到这些坑的你能够有所帮助。

       入门Demo,搭建了两个spring boot 项目,各自实现发布(spring-cloud-stream-binding-output)、订阅(spring-cloud-stream-binding-input)这俩功能,通俗讲就是一个服务发信息,另一个服务接受信息这样子。只不过使用了rabbitmq这个服务器的消息队列进行支持。



首先,第一个项目,创建订阅项目。

新建一个spring boot项目,项目名为:spring-cloud-stream-binding-input

pom.xml文件中主要依赖如下:

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

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

application.properties文件内容如下:

server.port=8080

spring.cloud.stream.bindings.input.destination=sink-channel

spring.cloud.stream.binders.defaultRabbit.type=rabbit
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.host=192.168.25.130
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.port=5672
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.username=admin
spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.password=admin

这里需要说明一下的是,关于第三行~第七行,这五行配置的是连接rabbitmq的地址、端口、用户名和密码。这里需要说明的是,如果不配置这些内容也是可以的,只不过他会默认的rabbitmq设置,他会连接localhost下5672端口的rabbitmq服务,账号密码也不知道是什么鬼东西(反正控制台没打)。刚学习的时候,我就纳闷了,因为不起作用,乍看一下才知道,连接了localhost的rabbitmq,可我本地没有搭建rabbitMq啊,于是又在linux系统上搭了一个rabbitmq服务器(具体搭建可以搜索其他文章),配置好了之后,在项目里设置一下我rabbitmq服务器的相关信息,就可以连上去了。

另外,这里说个题外话,rabbitMQ搭建在linux上后,注意他是默认开启5672端口的。所以要么就开启一下5672端口,要么像我一样,因为是自己电脑虚拟机搭建的,所以就干脆把防火墙给关了。然后可以试着用浏览器访问  ip:15672  ,我这里是访问192.168.25.130:15672就进入rabbitMQ的webUI界面了。成功就说明可以连接rabbitMQ。

接着讲这个订阅项目~

在项目的主类:  SpringCloudStreamBindingInputApplication.java中

@SpringBootApplication
@EnableBinding(Sink.class)
public class SpringCloudStreamBindingInputApplication {

   private static Logger logger = LoggerFactory.getLogger(SpringCloudStreamBindingInputApplication.class);

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

   @StreamListener(Sink.INPUT)
   public void sinkMessage(Object message) {
      logger.info("received message:" + message.toString());
   }
}

以上,就把订阅项目做好了。详细注解的用法搜索其他博客文章应该会讲述。


第二步:搭建发布项目,项目名为:spring-cloud-stream-binding-output


pom.xml文件与上个项目相同,


application.properties文件也与上个项目相同,只不过添加一个属性:

fixedDelay: 5000   #设置继上一个任务之后,延时时间间隔


然后启动类:SpringCloudStreamBindingOutputApplication.java文件内容为:

@SpringBootApplication
@EnableBinding(Source.class) // 该注解用来绑定输出的管道,进行消息推送。本案例就推送格式化的时间
public class SpringCloudStreamBindingOutputApplication {

   private static Logger logger = LoggerFactory.getLogger(SpringCloudStreamBindingOutputApplication.class);

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

   @InboundChannelAdapter(value = Source.OUTPUT)
   public String timerMessageSource() {
      String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
      logger.info("publish message: " + format);
      return format;
   }
}

这里通过发送当前时间作为消息主体。


测试:

依次启动spring-cloud-stream-binding-input、spring-cloud-stream-binding-output项目。

然后便可以看到两个项目的控制台交替打印消息:


以下为input项目控制台信息。



以下为output项目控制台信息:


可以看到,都有“Attempting to connect to: [192.168.25.130:5672]”的信息,这里可以确认你所访问的rabbitMQ是否配置是正确的。其次便是日期消息的相互交替输出,说明结果无误。


另外,我这里用浏览器访问 192.168.25.130:15672便可以登录rabbitMQ的图形化界面去查看消息队列和连接的情况。





这里让我比较纳闷的是,命名只开了发布和订阅两个项目,莫名其妙出现了三个连接。真是神奇。。都不知道是怎么回事。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值