spring stomp+rabbitmq实现点对点消息推送

  当前的项目需要用到消息推送这个功能,领导拍板说用stomp+rabbitmq。但是我百度了一下,没找到特别好的博客,特此写篇博客记录下,希望对初学stomp的人一点帮助。

   学习stomp之前,先来扯扯tcp和http。我们知道,tcp是全双工的,也就是说建立tcp的双方是可以互相主动通信的。http呢,是一个应用层协议,使用tcp作为传输层,但是http的模型是request/response,也就是说每次http通信都要客户端主动发起请求,然后服务端响应。所以服务器端是无法主动推送消息到客户端,这样看起来,http就有点像单工的了。后面就出现了websocket协议,它利用了tcp全双工的特性,使得通信双方可以主动的向对方发送消息。不过websocket目前只在浏览器端支持,但是websocket协议出现的比较晚,所以还是有部分浏览器不支持websocket。websocket呢,只保证双方可以主动通信,除此之外,没有像http一样有什么POST,GET,什么restful这些语义,所以用起来还不是很方便。后面stomp就出来了,它和http协议很类似,建立连接时用connect,订阅消息用subscribe。对于stomp和websocket的细节这里就不做过多介绍了,如果对stomp还不是很了解的话,可以先切出去,先了解一下stomp,网上应该有很多比我讲的好的教程。

  再来说说rabbitmq,他是一个消息队列,这里我们就用它来暂存消息,官网地址:www.rabbbitmq.com(rabbitmq的官方文档看起来是非常舒服的)。为了让rabbitmq支持stomp,需要安装插件,cd到bin目录,执行以下命令:

rabbitmq-plugins enable rabbitmq_web_stomp
rabbitmq-plugins enable rabbitmq_web_stomp_examples

 重启rabbitmq即可。

现在可以开始实战了,使用idea去spring官网下一个spring boot的初始化项目,然后添加pom依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>2.2.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>stomp-websocket</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-net</artifactId>
    <version>2.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>3.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.39.Final</version>
</dependency>
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值