• 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分布式
  • 相关阅读:
    Delphi的 Format格式化函数
    Delphi的Trim函数
    Delphi容器类之---Tlist,TStringlist,THashedStringlist的效率比较
    Delphi容器类之---TOrderedList、TStack、TQueue、TObjectStack、TObjectQueue
    Delphi容器类之---TList、TObjectList、TComponentList、TClassList
    Delphi的分配及释放---New/Dispose, GetMem/FreeMem及其它函数的区别与相同
    Delphi容器类之---TList、TStringList、TObjectList,以及一个例程的代码分析
    Linux C编程学习6---字符串处理、数据转换
    Linux C编程学习之开发工具3---多文件项目管理、Makefile、一个通用的Makefile
    Linux C编程学习之开发工具2---GDB调试器
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5077171.html
Copyright © 2020-2023  润新知