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消费者的能力,以达到前后端即时推送的效果。

  • 相关阅读:
    【leetcode】1295. Find Numbers with Even Number of Digits
    【leetcode】427. Construct Quad Tree
    【leetcode】1240. Tiling a Rectangle with the Fewest Squares
    【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    【leetcode】1291. Sequential Digits
    【leetcode】1290. Convert Binary Number in a Linked List to Integer
    【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps
    【leetcode】1289. Minimum Falling Path Sum II
    【leetcode】1288. Remove Covered Intervals
    【leetcode】1287. Element Appearing More Than 25% In Sorted Array
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/10058742.html
Copyright © 2011-2022 走看看