消息队列实践一之RabbitMQ消息推送(解决服务器错误:Whoops! Lost connection to ws://localhost:15674/ws)

一、写在前面的问题和解决办法

1、问题背景:

RabbitMQ,用websock推送消息失败

2、问题描述:

服务器错误:Whoops! Lost connection to ws://localhost:15674/ws

3、解决办法:

网上查了好久说,加上这个jackson-core的jar包。我加啦啊!没有用啊!
我还换了版本试了还是报这个错。

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.11.0</version>
        </dependency>

后来发现是因为没有启用Web STOMP插件,我真是愚蠢的humanbeing~

在RabbitMQ服务器的sbin目录下

rabbitmq-plugins enable rabbitmq_web_stomp

在这里插入图片描述
然后就成功啦~

O_OO_OO_OO_OO_OO_OO_O详细的学习笔记O_OO_OO_OO_OO_OO_OO_O

二、RabbitMQ学习笔记

最近在学习消息队列,参考的书籍是《分布式消息中间件实践》和网课(叫啥消息队列高手课,等我后面确认下),作为一个笔记狂魔,每次学习我都产出大量的笔记,那也不是每篇笔记都分享的,写这篇是因为在学习RabbitMQ的时候遇到了好多的问题,一一解决后,整理出来解决的过程和办法,还有一些自己的理解和总结。

(一)RabbitMQ的简单介绍

在学习了几款MQ产品以后,RabbitMQ给我的感觉就是,有点特别,与众不同。
(1)消息队列的模式
一般来说,消息队列有两种模式,一种是队列模式(点对点),一种是发布/订阅模式,
两个最大的区别就在于,一份消息能不能被消费多次的问题。
如果发布/订阅模式的订阅者只有一个,那就跟队列模式一样了。所以,发布/订阅模式是兼容队列模式的。

为啥好端端要说这个模式呢?
因为大多数消息队列都是发布/订阅模式,而RabbitMQ它却是为数不多的队列模式。
那它是不是就不能实现一份消息被消费多次啦?
那也不是的,它虽然是队列模式,但是它有个special的路由功能,也可以实现消息被消费多次的功能。

(2)
RabbitMQ是基于Erlang语言的,这个语言十分的小众,而且比较难懂。
对于学Java这些语言的我们来说,就像母语是英语的人去学汉语一样,比较难。
所以如果有啥问题可能不太好改。

(3)RabbitMQ是AMQP协议的一个开源实现。
这个AMQP是消息协议的一种,用我新买的ipad pro加二代pencil画了一下这个协议的图(我照着书上画的,嘻嘻)。
在这里插入图片描述
这个Exchange是消息处理中心Broker里的。
就是一个路由规则的含义,里面有Routing Key和Queue的映射关系。
我感觉这个Exchange就像是一个快递员,收到了生产者Publisher传过来的消息,就去查一下自己的规则表,看看这个消息发给哪个Queue。
如果找不到对应的Queue,就把消息扔回去给生产者,或者直接丢掉(直接丢掉就是一个很坏的快递员,哼╭(╯^╰)╮)
我又感觉这个Queue就像不同的菜鸟驿站的站点,嘻嘻。
如果消费者订阅了消息队列,消息队列收到消息就会尝试将消息传递给消费者,如果传递不成功,就把消息先存下来,等消费者来拿。(是不是真的很像菜鸟驿站)

然后我又感觉这个Exchange是个法师,如果看到一条消息对应了多个队列的话,它就会把这条消息复制成多个一毛一样的消息,发给不同的队列。(发现一个快递有好多人需要,就复刻了好多一模一样的)

哎呀,越写越多,想写的还没写呢。

(二)环境搭建

1、Erlang和RabbitMQ服务器
前面不是说啦RabbitMQ是基于Erlang语言的,所以要把RabbitMQ服务器启起来,还得下个Erlang。

需要注意的是,RabbitMQ和Erlang的版本要对应起来的,还不可以瞎下一个。
RabbitMQ和Erlang版本对应网站

在这里插入图片描述
Erlang下载网站
RabbitMQ下载网站

我选啦RabbitMQ 3.8.4 和Erlang 22.3
资源我也上传啦!没分的找我一下,我再分享百度云盘,这会儿有点懒。

在这里插入图片描述
安装了以后,要用的命令都在这个sbin里面,启动RabbitMQ服务器
到sbin目录下,执行命令

rabbitmq-server

在这里插入图片描述
然后在chrome浏览器输
http://localhost:15672/
然后有这个页面嘞
在这里插入图片描述
账号和密码都默认是guest.登录进去就是酱紫~
在这里插入图片描述
哇,虽然还没有做啥,只是顺利的跑出来这个页面,也是很开心呀~

(三)基于RabbitMQ的消息推送

其实上面写了辣么多,还没写到我真的想写的。
前面我也说啦,是学习的《分布式消息中间件实践》这本书。前面几个简单的例子,我就不写啦,对着书写一遍完全没得问题。
想写的是这个WebSocket通信的这节例子,啊,跑起来真的艰难,我一定要记录一下。

实现的功能我简单介绍一下,就是一个服务端,一个客户端网页,然后服务端向RabbitMQ推送一条消息的时候࿰

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值