zmq封装

ZmqBindlib

zmq常用封装

使用方法

基本使用

1.简单请求回复

 ZmqRequest request = new ZmqRequest();request.RemoteAddress = localaddes;request.PubClient = "A";int num = 0;while (true){//   Thread.Sleep(1000);//string msg = request.Request("hi");Person p=  request.Request<Person,Person>(new Person { Name = "jin", Description = "请求", Id = num++, Title = "rr" });Console.WriteLine(p.Description+p.Name);}
    ZmqResponse rep = new ZmqResponse();rep.LocalAddress = localaddes;rep.Start();int num = 0;//rep.ByteReceived += (sender, e) =>//{//    Console.WriteLine(System.Text.Encoding.Default.GetString(e));//    rep.Response("word"+num++);//};rep.StringReceived += (sender, e) =>{Console.WriteLine(e);if (e == "hi"){Thread.Sleep(1000);}rep.Response("word" + num++);};

2.异步下的请求回复,类似TCP,支持多请求

  server =new EhoServer();server.RouterAddress = "tcp://127.0.0.1:66666";//服务地址,请求的远端地址//  server.ByteReceived += Server_ByteReceived;// server.StringReceived += Server_StringReceived1; server.Start();
 private static void Server_StringReceived1(object? sender, RspSocket<string> e){Console.WriteLine(e.Message);if (e.Message == "hi"){//  Thread.Sleep(4000);e.Response("jinyu");return;}e.Response("word");}
		 private static  void recvice(){while (true){var ss = server.GetMsg<Person>();ss.Message.Description = "回复"+ss.Message.Id;ss.Response(ss.Message);}}

3.订阅发布

	````ZmqSubscriber sub = new ZmqSubscriber();sub.Address = new string[] { localaddes };sub.Subscribe("A");// sub.ByteReceived += Sub_ByteReceived;sub.StringReceived += Sub_StringReceived;
		  ZmqPublisher pub = new ZmqPublisher();pub.LocalAddress =localaddes;// pub.IsProxy = true; 是否使用中间代理int num = 0;while (true){// Thread.Sleep(1000);pub.Publish("A", "ssss"+num++);}
		static void Proxy(){//中间代理ZmqDDSProxy.PubAddress = "tcp://127.0.0.1:7771";//注意,客户端订阅此地址ZmqDDSProxy.SubAddress = "tcp://127.0.0.1:7772";//客户端发布此地址ZmqDDSProxy.Start();}
	
## 中心高可用部署
1.推荐方式使用IP漂移:1. windows  使用DNS+VLS;Panguha软件2.Linux使用keppalive2.使用封装该功能前提是可以使用广播,可以允许少量数据丢失;(1)请求返回模式中心:
      EhoServer eho = new EhoServer();eho.IsCluster = true;eho.DealerAddress = "inproc://server";eho.RouterAddress = "tcp://127.0.0.1:5550";eho.StringReceived += EhoServer_StringReceived;eho.Start();
    客户端:与单个一致(2)订阅发布中心:
  ZmqDDSProxy.PubAddress = "tcp://127.0.0.1:2222";ZmqDDSProxy.SubAddress = "tcp://127.0.0.1:4444";ZmqDDSProxy.IsCluster=true;ZmqDDSProxy.Start();
发布端:
        ZmqPublisher pub = new ZmqPublisher();pub.Address = "tcp://127.0.0.1:5678";pub.IsProxy = true; //是否使用中间代理pub.IsDDS = true;//高可用启动int num = 0;while (true){Thread.Sleep(1000);try{pub.Publish("A", "ssss" + num++);}catch(Exception ex){Console.WriteLine(ex.ToString());}}
订阅端:
          ZmqSubscriber sub = new ZmqSubscriber();sub.Address = new string[] { "tcp://127.0.0.1:1234" };sub.IsDDS = true;//高可用启动sub.Subscribe("");// sub.ByteReceived += Sub_ByteReceived;sub.StringReceived += Sub_StringReceived;
            对于发布订阅,中心何发布订阅端都需要启动高可用,会刷新地址(3)负载均衡式订阅发布该模式是仿照kafka功能的;中心:
           ZmqDDSProxy.PubAddress = "tcp://127.0.0.1:2222";ZmqDDSProxy.SubAddress = "tcp://127.0.0.1:4444";ZmqDDSProxy.IsCluster = true;//高可用ZmqDDSProxy.StartProxy(); //注意方法,启动和另外发布订阅方法不同
            发布端:和前面一样订阅端:
       ZmqSubscriberGroup zmqSubscriber=new ZmqSubscriberGroup();zmqSubscriber.Address = "tcp://127.0.0.1:1234";zmqSubscriber.IsDDS= true;//高可用// zmqSubscriber.Indenty = "test";//订阅在不同分组zmqSubscriber.Subscribe("A");zmqSubscriber.StringReceived += ZmqSubscriber_StringReceived;
            (4)kafka封装
         KafkaPublisher kafkaPublisher = new KafkaPublisher();int num = 0;while (true){Thread.Sleep(1000);kafkaPublisher.Push("A", "SSSSS"+num++);}
            KafkaSubscriber  kafkaSubscriber = new KafkaSubscriber();kafkaSubscriber.Subscriber("A");kafkaSubscriber.Consume(p =>{if(p==null){return;}Console.WriteLine(string.Format("Received message at {0}:{1}", p.Topic, p.Value));});
说明1.接收数据一端,定义了2个事件一个方法,顺序是ByteReceived、StringReceived、GetMsg<T>()方法。一旦前一个实现,后面就无效。项目地址:https://github.com/jinyuttt/ZmqBindlib.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微信小程序开发】小程序微信用户授权登录(用户信息手机号)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 授权流程讲解 一.用户信息授权登录 1.w…

MD-MTSP:粒子群优化算法PSO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、多仓库多旅行商问题MD-MTSP 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市…

LabVIEW中管理大型数据

LabVIEW中管理大数据 LabVIEW的最大优势之一是自动内存管理。这种内存管理允许用户轻松创建字符串、数组和集群&#xff0c;而无需C/C用户经常担心。但是&#xff0c;这种内存管理设计为绝对安全&#xff0c;因此数据被非常频繁地复制。这通常不会造成任何问题&#xff0c;但是…

vue3 列表页开发【选择展示列】功能

目录 背景描述&#xff1a; 开发流程&#xff1a; 详细开发流程&#xff1a; 总结&#xff1a; 背景描述&#xff1a; 这个功能是基于之前写的 封装列表页 的功能继续写的&#xff0c;加了一个选择展示列的功能&#xff0c;可以随时控制表格里展示那些列的数据&#xf…

【算法教程】排列与组合的实现

数据准备 在讲排列与组合之前&#xff0c;我们先定义数据元素类型Fruit class Fruit{constructor(name,price){this.name namethis.price price} }排列 对N个不同元素进行排序&#xff0c;总共有多少不同的排列方式&#xff1f; Step1: 从N个元素中取1个&#xff0c;共N种…

Pandas 数据处理分析系列1--SeriesDataFrame数据结构详解

Pandas 概述 Pandas 是一个开源的数据分析和数据处理库,是基于 NumPy 开发的。它提供了灵活且高效的数据结构,使得处理和分析结构化、缺失和时间序列数据变得更加容易。其在数据分析和数据处理领域广泛应用,在金融、社交媒体、科学研究等领域都有很高的使用率和广泛的应用场…

系列十一、Redis中分布式缓存实现

一、缓存 1.1、什么是缓存 内存就是计算机内存中的一段数据。 1.2、内存中的数据特点 读写快断电数据丢失 1.3、缓存解决了什么问题 提高了网站的吞吐量和运行效率减轻了数据库的访问压力 1.4、哪些数据适合加缓存 使用缓存时&#xff0c;一定是数据库中的数据极少发生改…

【Vue】Element开发笔记

Element开发笔记 前言 官网 https://element.eleme.cn/#/zh-CN/component/upload 其它项目网站 https://www.cnblogs.com/qq2806933146xiaobai/p/17180878.html 表格 序号列添加 <el-table-column type"index" :index"handleIndexCalc" label&qu…

深度强化学习 第 4 章 DQN 与 Q 学习

4.1 DQN 最优动作价值函数的用途 假如我们知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;我们就能用它做控制。 我们希望知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;因为它就像是先知一般&#xff0c;可以预见未来&#xff0c;在 t t t 时刻就预见 t t t 到 n n n时刻之间的累计奖励的期望。假如…

5G来临,迎客莱带你探索运营商大数据的应用

随着5G时代的来临&#xff0c;不仅在算力的基础上得到了加强和保障&#xff0c;同时也丰富了计算的方式和模式&#xff0c;如边缘计算、霾计算等。计算方式和模式的改变&#xff0c;对于运营商来说&#xff0c;意味着更丰富的数据维度&#xff0c;更鲜活的数据和更强大的数据处…

无人机航拍图像拼接与目标识别

一、简介 无人机用来做图像侦察是常见功能&#xff0c;现有技术基本是无人机对某片区域进行飞行&#xff0c;人工实时监控飞行图像&#xff0c;将图像录制成视频供事后回放。此方法对人员业务要求比较高、反应速度足够快、不利于信息收集、录制视频丢失空间信息、对于后期开展区…

Qt判断一个点在多边形内还是外(支持凸边形和凹变形)

这里实现的方法是转载于https://blog.csdn.net/trj14/article/details/43190653和https://blog.csdn.net/WilliamSun0122/article/details/77994526 来实现的&#xff0c;并且按照Qt的规则进行了调整。 以下实现方法有四种&#xff0c;每种方法的具体讲解在转载的博客中有说明&…

Python之爬虫

目录 HTTP请求HTTP响应获得页面响应伪装用户访问打包数据爬取豆瓣top250 HTTP请求 HTTP&#xff1a;HypertextTransferProtcol 超文本传输协议 1、请求行 POST/user/info?new_usertrue HTTP/1.1#资源了路径user/info 查询参数new_usertrue 协议版本HTTP/1.1 2、请求头 Ho…

element ui 下拉框 选择月份和天数

一、背景 目前做的管理系统项目&#xff0c;期望实现功能为&#xff1a;设置出账周期和出账日&#xff0c;考虑使用element ui下拉框实现功能 二、所用技术 vue2element ui 三、实现效果 四、具体代码 <template><popup-frame :title"批量设置出账日" …

Leetcode—2530.执行K次操作后的最大分数【中等】(C语言向上取整数学公式)

2023每日刷题&#xff08;五&#xff09; Leetcode—2530.执行K次操作后的最大分数 向上取整思想 参考了这篇文章 有人肯定会问&#xff0c;这个向上取整为什么是这样来的。接下来我简单讲解一下。 数学式&#xff1a; x y 数学式&#xff1a;\frac{x}{y} 数学式&#xff1a…

配置Linux

首先安装VMware&#xff1a; 安装说明&#xff1a;&#xff08;含许可证的key&#xff09; https://mp.weixin.qq.com/s/XE-BmeKHlhfiRA1bkNHTtg 给大家提供了VMware Workstation Pro16&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1q8VE3TkPzDnM3u9bkTdA_g 提取码&…

文件的物理结构(连续分配,链接分配,索引分配)

1.文件块&#xff0c;磁盘块 类似于内存分页&#xff0c;磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。 很多操作系统中&#xff0c;磁盘块的大小与内存块、页面的大小相同。 内存与磁盘之间的数据交换&#xff08;即读/写操作、磁盘I/O&#xff09;都是以“块”为…

详细解读DALLE 3技术报告:Improving Image Generation with Better Captions

Diffusion models代码解读&#xff1a;入门与实战 前言&#xff1a;OpenAI是推动大模型创新的领头羊&#xff0c;最近发布的DALLE 3凭借着远超市面上其他图片生成模型的表现&#xff0c;再次火出圈。最近OpenAI官方发布了DALLE 3的技术报告《Improving Image Generation with B…

后缀表达式求值

题目要求: 后缀表达式求值&#xff1a;建立一个操作数栈S。然后从左到右读表达式&#xff0c;如果读到操作数就将它压入栈S中&#xff0c;如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项操作数进行运算&#xff0c;再将运算的结果代替原栈顶的n项压入栈中…

Catalan 数 和 Stirling 数

这个也可以理解为栈&#xff0c;用 ( 表示 入栈 &#xff0c; ) 表示出栈 , 任何情况下表示入栈的 ( 都必须大于等于 ) 的个数 这个思路和入栈出栈的思路是等价的