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依赖:


    org.springframework.boot
    spring-boot-starter-amqp
    2.2.8.RELEASE

    org.webjars
    stomp-websocket

    org.springframework.boot
    spring-boot-starter-websocket

    io.projectreactor
    reactor-net
    2.0.8.RELEASE

    io.projectreactor
    reactor-core
    3.2.5.RELEASE

    io.netty
    netty-all
    4.1.39.Final

你可能感兴趣的:(spring,java,rabbitmq,websocket)