zoukankan      html  css  js  c++  java
  • SignalR与ActiveMQ

    SignalR与ActiveMQ结合构建实时通信

     

    一、概述

    本教程主要阐释了如何利用SignalR与消息队列的结合,实现不同客户端的交互

    • SignalR如何和消息队列交互(暂使用ActiveMQ消息队列)
    • SignalR寄宿在web中和其他SignalR、控制台客户端交互。
    • SignalR单独寄宿在控制台中和其他SignalR、控制台客户端交互。

    下面屏幕截图展示了各个客户端通过ActiveMQ相互通信

      1、SignalR寄宿在web:

      2、SignalR寄宿在控制台中,web客户端调用SignalR,读者自行测试。

     工程目录:

    一、创建项目

      1、创建生产者项目,该项目要是通过控制台输入消息,发送到消息队列

        创建控制台应用程序命名为ActiveMQNetProcucer,然后用包管理器安装ActiveMQ的.Net客户端

        Install-Package Apache.NMS.ActiveMQ

        主要代码如下:

    View Code

       2、创建消费者项目,该项目主要是订阅消息队列中的消息  

        创建控制台应用程序命名为ActiveMQNetCustomer,然后用包管理器安装ActiveMQ的.Net客户端

        Install-Package Apache.NMS.ActiveMQ

        主要代码:

    View Code

       3、创建包装ActiveMQ生产者和消费者项目,供SignalR.ActiveMQ.WebHost项目使用,来发布消息和订阅消息

        创建类库项目Signalr.ActiveMQ,然后用包管理器安装ActiveMQ的.Net客户端

        Install-Package Apache.NMS.ActiveMQ

        主要代码;

        生产者类:创建单实例生产者对象调用Send发放,发送消息到ActiveMQ消息队列    

    View Code

         消费者类:启用单独的线程监听消息队列中的消息,当监听到消息后 广播给所有的 SinglaR客户端,其中静态属性Clients保存了所有的SinglaR客户端,当SinglaR客户端连接或者断开的时候会更新Clients属性详细代码在SignalR.ActiveMQ.WebHost中的 MyHub文件中。为了阻止当前线程退出调用了 System.Threading.Thread.CurrentThread.Join();阻塞当前线程,避免当web中方法执行完毕后对象被回收,起不到监听消息队列的作用。

     View Code

       4、创建web自宿主的SignalR项目,该项目既发布消息,也订阅消息

        创建MVC项目SignalR.ActiveMQ.WebHost,然后用包管理器安装ActiveMQ的.Net客户端

        Install-Package Apache.NMS.ActiveMQ

        创建SignalR的hub:当有客户端连接或者断开的时候更新Customer.Clients 静态属性,保存所有的SignalR客户端。

        web端通过调用代理的Send方法发送消息到消息队列。

    View Code

        Startup类中启动消费者监听线程,调用的项目Signalr.ActiveMQ中的Customer.Run()方法:

    View Code

     二、启动顺序:

    1、启动ActiveMQ程序 可参考  http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html

    2、启动ActiveMQNetProcucer项目

    3、ActiveMQNetCustomer项目

    4、启动SignalR.ActiveMQ.WebHost,开多个浏览器窗口,模拟多个SignalR客户端 

     三、SignalR宿主和web客户端分离两个项目 

    Signalr.ActiveMQ.SelfHost 用控制台寄宿SignalR提供的服务供Signalr.ActiveMQ.Web使用

    Signalr.ActiveMQ.Web 通过chart.html调用Signalr.ActiveMQ.SelfHost的服务 

    Signalr.ActiveMQ.SelfHost 和SignalR.ActiveMQ.WebHost不能同时启动,现在两个项目绑定到了同一个端口。

    四、测试

      在生产者窗口中输入消息回车,观察其他客户端的变化

         在Singlar的web客户端发送消息,观察其他客户端的变化

    源代码:https://github.com/zhaoyingju/SignalrActiveMQ.git

     
    分类: Asp.net分布式
  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5077171.html
Copyright © 2011-2022 走看看