RabbitMQ使用amqp实现实时推送功能

小编最近在做大屏实时推送数据;所以在网上学习了这个rabbitmq的amqp来做这个功能;附上自己的总结
消息的实时推送一般有3种方式:
1.Ajax 短轮询
2.长轮询
3.WebSocket 双向通信
短轮询的实现是定时异步刷新任务来实现数据的加载,但这种方式实时效果较差,而且对服务端的压力也较大。
长轮询的实现是通过 Ajax 机制,但区别于传统的 Ajax 应用,长轮询的服务器端会在没有数据时阻塞请求直到有新的数据产生或者请求超时才返回,之后客户端再重新建立连接获取数据。但长轮询服务端会长时间地占用资源,如果消息频繁发送的话会给服务端带来较大的压力。
WebSocket 是 HTML5 中一种新的通信协议,能够实现浏览器与服务器之间全双工通信。如果浏览器和服务端都支持 WebSocket 协议的话,该方式实现的消息推送无疑是最高效、简洁的。并且最新版本的 IE、Firefox、Chrome 等浏览器都已经支持 WebSocket 协议,Apache Tomcat 7.0.27 以后的版本也开始支持 WebSocket。

demo:[参考git项目](https://github.com/hzoboy/rabbitmq-websocket.git)

一、前言

RabbitMQ相关的一些内容

4369 (epmd), 25672 (Erlang distribution)

Epmd 是 Erlang Port Mapper Daemon 的缩写,在 Erlang 集群中相当于 dns 的作用,绑定在4369端口上。

5672, 5671 (AMQP 0-9-1 without and with TLS)

AMQP 是 Advanced Message Queuing Protocol 的缩写,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,专为面向消息的中间件设计。基于此协议的客户端与消息中间件之间可以传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制。Erlang 中的实现有 RabbitMQ 等。

15672 (if management plugin is enabled)

通过 http://serverip:15672 访问 RabbitMQ 的 Web 管理界面,默认用户名密码都是 guest。(注意:RabbitMQ 3.0之前的版本默认端口是55672,下同)

61613, 61614 (if STOMP is enabled)

Stomp 是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档,实践一下 Stomp 协议需要:

一个支持 stomp 消息协议的 messaging server (譬如activemq,rabbitmq);
一个终端(譬如linux shell);
一些基本命令与操作(譬如nc,telnet)

1883, 8883 (if MQTT is enabled)

MQTT 只是 IBM 推出的一个消息协议,基于 TCP/IP 的。两个 App 端发送和接收消息需要中间人,这个中间人就是消息服务器(比如ActiveMQ/RabbitMQ),三者通信协议就是 MQTT

二、效果

使用了AMQP功能实时推送

在这里插入图片描述

三、安装rabbitmq

安装完rabbitMq后需要启动stomp有关的一系列插件:

rabbitmq-plugins enable rabbitmq_management rabbitmq_web_stomp rabbitmq_stomp rabbitmq_web_stomp_examples

其中RabbitMQ运行在15672端口,stomp服务运行在15674端口。

RabbitMQ 有很多第三方插件,可以在 AMQP 协议基础上做出许多扩展的应用。Web STOMP 插件就是基于 AMQP 之上的 STOMP 文本协议插件,利用 WebSocket 能够轻松实现浏览器和服务器之间的实时消息传递,具体实现方式如下图所示:

在这里插入图片描述

四、开启服务

rabbitmqctl stop
rabbitmq-server start

注:启动web查看工具会多开一个15672端口.注意3.0以下版本端口为55672,本例子为3.0以上版本所以为15672

重启完成之后你用你的浏览器输入你rabbitmq服务器地址然后访问15672端口,你会看见登陆界面,账号和密码都是guest,我在本地输入下面地址

五、访问http://localhost:15672/#/

这里有版本区分 3.0以上 以端口15672来访问管理页面

登录
guest
guest

在这里插入图片描述

六、demo

知识点

这里还有其他模式,根据自己需求更改


	/queue/queuename:使用默认转发器订阅/发布消息,默认由stomp自动创建一个持久化队列 

	/amq/queue/queuename:与/queue/queuename的区别在于队列不由stomp自动进行创建,队列不存在失败 

	/topic/routing_key:通过amq.topic转发器订阅/发布消息,订阅时默认创建一个临时队列,通过routing_key与topic进行绑定 

	/temp-queue/xxx:创建一个临时队列(只能在headers中的属性reply-to中使用),可用于发送消息后通过临时队列接收回复消息,接收通过client.onreceive 

	/exchange/exchangename/[routing_key]:通过转发器订阅/发布消息,转发器需要手动创建 

	client.subscribe(destination,callback,headers) :订阅消息 

	client.send(destination,headers,body):发布消息 

	client.unsubscribe(id):取消订阅,id为订阅时返回的编号 

	client.onreceive:默认接收回调从临时队列获取消息 
	

yml

server.port=7070

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

html

<html>  
    <head>  
        <title>WebSocket</title>  
        <
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值