zoukankan      html  css  js  c++  java
  • NET Core2基于RabbitMQ对Web前端实现推送功能

    NET Core2基于RabbitMQ对Web前端实现推送功能

    https://www.cnblogs.com/Andre/p/10012329.html

    在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯。因定时刷新的方法弊端很多(已不再采用),所以基于WebSocket技术实现的通讯方案正越来越受大家喜爱,于是在ASP.NET中就有了鼎鼎大名的Signalr。但Signalr不是咱们这里的主角,这里将给大家介绍另一套基于WebSocket的前后端通讯方案,可以给大家在应用中多一个选择。

    准备

    在开始动手前,咱们先简单介绍下方案的组成部分,如下:

    RabbitMQ:是一个成熟的MQ队列服务,由 Erlang 语言开发的 AMQP 的开源实现。这里用来接收后端的指令并广播到前端(基于topic模式)。关于更多RabbitMQ的实现可以查看我另一篇文章,传送门

    RabbitMQ插件stomp:是一个让RabbitMQ支持stomp协议的插件,必需安装后才能通过RabbitMQ实现前端通讯。安装说明在此:http://www.rabbitmq.com/stomp.html

    stomp.js:是一个基于stomp协议的客户端实现,底层基于WebSocket通讯协议。这里用于前端实现WebSocket通讯。官网地址:https://github.com/jmesnil/stomp-websocket

    Lezhima.Rest:是一个基于ASP.NET Core2的Web Api后端程序,用来模拟向前端发送指令。

    Lezhima.Site:是一个纯前端技术的前端程序,用来模拟前端实时接收后台的指令。

    实现

    如上面所述,我们已经清楚了整个实现思路,那么下面就来看看具体的代码实现吧。

    1、首先来看看Lezhima.Rest的MQ生产者代码,如下:

    复制代码
    1 ///


    2 /// MQ生产者,采用topic模式推送指定内容
    3 ///

    4 ///
    5 public static void PushMessage(string objText)
    6 {
    7 //创建MQ连接工厂
    8 var factory = new ConnectionFactory()
    9 {
    10 HostName = "localhost",
    11 Port = 5672,
    12 UserName = "fans",
    13 Password = "123456"
    14 };
    15 //创建MQ连接
    16 using (var connection = factory.CreateConnection())
    17 using (var channel = connection.CreateModel())
    18 {
    19 //绑定交换器
    20 channel.ExchangeDeclare(exchange: "topic/test", type: "topic");
    21 var body = Encoding.UTF8.GetBytes(objText);
    22 //对指定routingkey发送内容
    23 channel.BasicPublish(exchange: "amq.topic",
    24 routingKey: "test",
    25 basicProperties: null,
    26 body: body);
    27 }
    28 }
    复制代码

    2、Lezhima.Site的前端代码,如下:

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    41
    42
    43


    44

    接收来自后端的消息


    45

    46

    47
    81
    82
    83
    复制代码

    3、分别运行“Lezhima.Rest”与“Lezhima.Site”程序后,效果是这个样子的,如下:

    1543044548(1)

    总结

    1、借助RabbitMQ实现前后端通讯功能时,必需先安装RabbitMQ插件stomp,通过该插件可使RabbitMQ支持WebSocket通讯能力。而我们的后端开发人员只需通过“生产者”方法按需向MQ发送数据即可,MQ将根据routingKey广播给所有客户端(消费者)。

    2、前端借助stomp.js可以简便的实现与RabbitMQ通讯,并绑定相应的routingKey后承担MQ消费者的能力,以达到前后端即时推送的效果。

  • 相关阅读:
    应用运维职业现状
    两年工作总结
    explicit用法
    最小生成树 之 CODE[VS] 1231 最优布线问题
    最小生成树 之 CODE[VS] 1078 最小生成树
    并查集 之 CODE[VS] 1073 家族
    贪心 + 并查集 之 CODE[VS] 1069 关押罪犯 2010年NOIP全国联赛提高组
    枚举+并查集 之 CODE[VS] 1001 舒适的路线 2006年
    SPFA算法(求解单源最短路)详解 + 最短路 之 CODE[VS] 1079 回家
    最短路 之 CODE[VS] 1041 Car的旅行路线 2001年NOIP全国联赛提高组
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/10058742.html
Copyright © 2011-2022 走看看