第一部分引用于:点击打开
1:简单介绍
PUB-SUB模式一般处理的都不是系统的关键数据。发布者不关注订阅者是否收到发布的消息,订阅者也不知道自己是否收到了发布者发出的所有消息。你也不知道订阅者何时开始收到消息。类似于广播,收音机。因此逻辑上,它都不是可靠的。这个可以通过与请求响应模型组合来解决。
图1:简单的发布订阅模式
图2:与请求响应模式组合的发布订阅模式
2:案例
定义IPublishser接口
Publisher实现类
namespace NetMQDemoPublisher{ ???public class Publisher:IPublisher ???{ ???????private object _lockObject = new object(); ???????private PublisherSocket _publisherSocket; ???????public Publisher(string endPoint) ???????{ ???????????_publisherSocket = new PublisherSocket(); ???????????_publisherSocket.Options.SendHighWatermark = 1000; ???????????_publisherSocket.Bind(endPoint); ???????} ???????#region Implementation of IDisposable ???????/// <summary> ???????/// 执行与释放或重置非托管资源相关的应用程序定义的任务。 ???????/// </summary> ???????public void Dispose() ???????{ ???????????lock (_lockObject) ???????????{ ???????????????_publisherSocket.Close(); ???????????????_publisherSocket.Dispose(); ???????????} ???????} ???????/// <summary> ???????/// 发布消息 ???????/// </summary> ???????/// <param name="topicName">主题</param> ???????/// <param name="data">内容</param> ???????public void Publish(string topicName, string data) ???????{ ???????????lock (_lockObject) ???????????{ ???????????????_publisherSocket.SendMoreFrame(topicName).SendFrame(data); ???????????} ???????} ???????#endregion ???}}
Publisher窗口界面
界面中实现的功能代码
定义ISubscriber接口
Subscriber实现类
Subscriber窗口界面
窗体功能代码
namespace NetMQDemoSubscriber{ ???public partial class SubscriberForm : Form ???{ ???????private ISubscriber subscriber; ???????public SubscriberForm() ???????{ ???????????InitializeComponent(); ???????} ???????private void SubscriberForm_Load(object sender, EventArgs e) ???????{ ???????????subscriber = new Subscriber("tcp://127.0.0.1:8888"); ???????????subscriber.RegisterSbuscriberAll(); ???????????subscriber.Nofity+= delegate(string s, string s1) ???????????{ ???????????????ListViewItem item = new ListViewItem(string.Format("topic:{0},Data:{1}", s, s1)); ???????????????listView1.Items.Add(item); ???????????}; ???????} ???}}
运行后,Publiser开启一个,Subscirber开启三个,进行测试如图
源码下载
如果觉得文章好,记得关注一下公众号哟!
NetMQ 发布订阅模式 Publisher-Subscriber
原文地址:http://www.cnblogs.com/mzy-google/p/7665656.html