ØMQ (也拼写作ZeroMQ0MQZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库。它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(message broker)。该库设计成常见的套接字风格的API。

ZeroMQ是由iMatix公司和大量贡献者组成的社群共同开发的。ZeroQ通过许多第三方软件支持大部分流行的编程语言 。类库提供一些套接字(对传统Berkeley套接字和Unix domain socket的泛化),每一个套接字可以代表一个端口之间的多对多连接。以消息的粒度进行操作,套接字需要使用一种消息模式(message pattern),然后专门为那种模式进行了优化。

如果说ZeroMQ最突出的三个特点是什么? 答案是 快,很快,非常快。相信如果您的单线程队列能够在几秒内完成千万级别的数据入列和出列您一定会有同样的感觉。

NetMQ 是使用c# 对ZeroMQ的实现。

闲话不说了,对于这个消息队列的介绍网上一搜一堆,我这边就讲一下具体的实现吧。

网上大部分的例子都是点对点的 发布=>订阅,通常消息队列的应用是 客户端发布,服务端中转,客户端接收,多对多的形式。发布端和接收端是一体的,打个简单的比喻,QQ群聊天,QQ群号码就是你订阅的主题。同时你自己也是发布端,同理其他成员也订阅了QQ群号码为主题,流程就成了 你发送消息到腾讯服务器,腾讯服务器转发消息到所有的群成员QQ,此时他们是订阅方,你是发布方,反过来群成员发布消息,你也能接收,这时群成员为发布方,你为订阅方,(打个比方,借用一下腾讯的的场景而已,QQ消息的收发不是这样的。)

现在我们来看一下 Client => Server => Client 模式的实现代码

服务端:

      static void Main(string[] args)
{
using (var xpubSocket = new XPublisherSocket("@tcp://127.0.0.1:1234"))
using (var xsubSocket = new XSubscriberSocket("@tcp://127.0.0.1:5678"))
{
var proxy = new Proxy(xsubSocket, xpubSocket);
Task.Factory.StartNew(proxy.Start);
Console.WriteLine("服务端启动完成。");
Console.ReadKey();
}
}

客户端:

        static void Main(string[] args)
{
//发布服务
PublisherSocket pubSocket = new PublisherSocket();
pubSocket.Connect("tcp://127.0.0.1:5678");
Console.WriteLine("连接消息发布代理服务器...\r\n"); //订阅服务
SubscriberSocket subSocket = new SubscriberSocket();
subSocket.Subscribe("Topic");//订阅主题
subSocket.Connect("tcp://127.0.0.1:1234");
Console.WriteLine("连接消息订阅代理服务器...\r\n"); //发布消息
pubSocket.SendMoreFrame("Topic").SendFrame("Hello World");
Console.WriteLine("主题:Topic,发布消息:Hello World\r\n"); //接收消息
string topic = subSocket.ReceiveFrameString();
string message = subSocket.ReceiveFrameString();
Console.WriteLine(string.Format("主题:{0},订阅消息:{1}\r\n",topic,message));
Console.ReadKey();
}
}

效果演示:

NetMQ(ZeroMQ)Client => Server => Client 模式的实现的更多相关文章

  1. Consul集群Server+Client模式

    Consul集群Server+Client模式 架构示意图 只使用Consul的Server模式有以下2个问题: 因为Consul Server数量受到控制所以压力承载(扩展性)是个问题. Serve ...

  2. 深入浅出 Redis client/server交互流程

    综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...

  3. Java Client/Server 基础知识

    Java的网络类库支持多种Internet协议,包括Telnet, FTP 和HTTP (WWW),与此相对应的Java网络类库的子类库为: Java.net  Java.net.ftp  Java. ...

  4. Network client/server

    <Beginning Linux Programming_4th>  chapter 15 Sockets 1  A simple local client/server 1)  clie ...

  5. Client–server model

    Client–server model From Wikipedia, the free encyclopedia The client–server model of computing ] Oft ...

  6. AndroidAsync :异步Socket,http(client+server),websocket和socket.io的Android类库

    AndroidAsync是一个用于Android应用的异步Socket,http(client+server),websocket和socket.io的类库.基于NIO,没有线程.它使用java.ni ...

  7. Linux SocketCan client server demo hacking

    /*********************************************************************** * Linux SocketCan client se ...

  8. Java: server/client 心跳机制实现 示例

    心跳机制 心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制. 大部分CS的应用需要心跳机制.心跳机制一般在Server和Client都要实现,两者实现原理 ...

  9. docker报Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)

    docker version Client: Version: 17.05.0-ce API version: 1.24 (downgraded from 1.29) Go version: go1. ...

随机推荐

  1. cache 的简单认识与思考

    之前对NOSQL的总结是:基本功能是key-value, 然后各自附加特殊功能. 现在简单的来认识一下cache. 背景 大家都知道NoSQL, 大多数都是 key-value 型的数据库.有些内存型 ...

  2. hdoj 2099 整除的尾数

    整除的尾数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. SQL Server 2016原生支持JSON

    转载原地址: http://www.cnblogs.com/lyhabc/p/4747694.html SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型.XML ...

  4. C++学习笔记(二):基本数据类型

    带符号整数: short至少16位: int至少与short—样长: long至少32位,且至少与int—样长: long long至少64位,且至少与long—样长: 无符号整数: unsigned ...

  5. 关于 javascript:void(0) 的使用

    在 Wep App 中,我们经常需要在 JavaScript 中处理链接的点击.因此,我们希望用户点击 <a> 元素时阻止它的默认行为.此时我们可以用很多不同的方法来处理.例如: < ...

  6. SQLite使用教程9 Select 语句

    http://www.runoob.com/sqlite/sqlite-select.html SQLite Select 语句 SQLite 的 SELECT 语句用于从 SQLite 数据库表中获 ...

  7. iOS开发-表视图的使用

    // // ViewController.m // Simple Table // // Created by Jierism on 16/7/20. // Copyright © 2016年 Jie ...

  8. Unable to read TLD "META-INF/c.tld"错误

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. Mac下移动硬盘不能粘贴

    不想格式化,安装 Paragon NTFS 10.0.2 from:http://www.nowmac.com/support/mac/664.html 就可以解决

  10. Samba Linux和Windows互访

    之前一直用的sshfs manager,但是会出现造成电脑黑屏的情况.网上也没找到其它类似的软件. 后面打算用Samba 直接搜到一篇很强大的文章. 1.  下载及安装Samba 推荐用yum来安装, ...