SignalR与ActiveMQ
2015-12-25 22:29
274 查看
SignalR与ActiveMQ结合构建实时通信
一、概述
本教程主要阐释了如何利用SignalR与消息队列的结合,实现不同客户端的交互SignalR如何和消息队列交互(暂使用ActiveMQ消息队列)
SignalR寄宿在web中和其他SignalR、控制台客户端交互。
SignalR单独寄宿在控制台中和其他SignalR、控制台客户端交互。
下面屏幕截图展示了各个客户端通过ActiveMQ相互通信
1、SignalR寄宿在web:
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程序 可参考 /article/4631337.html
2、启动ActiveMQNetProcucer项目
3、ActiveMQNetCustomer项目
4、启动SignalR.ActiveMQ.WebHost,开多个浏览器窗口,模拟多个SignalR客户端
三、[b][b]SignalR宿主和web客户端分离[/b]两个项目 [/b]
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, 分布式
相关文章推荐
- 期末总结
- Floodlight控制器的安装以及SDN环境的配置
- Python Queue模块详解
- Summary Ranges 有序数组找出连续的子数组并且输出
- 用OSSIM检查出Grub2登录验证绕过0Day漏洞
- python 我的学习历程 笔记和资源
- cocos2dx 中使用的一些C++ 11 特性
- 浅谈所谓的产品「用户画像」
- Objective-C
- OllyDbg消息断点(unable to read memory of debugged process...)
- Git之创建版本库&提交文件&相关命令
- Android ListView观察者模式浅析
- JAVA在ubuntu中运行报错---Exception in thread "main"
- hadoop详细了解5个进程的作用
- 一摞烙饼的排序
- Oracle 删除重复数据只留一条
- LogHtml-Android本地日志工具
- iOS 开发之动态下载系统提供的多种中文字体
- 从头开始swift2.0 仿乐乐医项目(一)开发前的准备
- Codeigniter Cannot use object of type stdClass as array