zmq封装

2023-10-21 17:04
文章标签 封装 zmq

本文主要是介绍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

这篇关于zmq封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255739

相关文章

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

哈希表的封装和位图

文章目录 2 封装2.1 基础框架2.2 迭代器(1)2.3 迭代器(2) 3. 位图3.1 问题引入3.2 左移和右移?3.3 位图的实现3.4 位图的题目3.5 位图的应用 2 封装 2.1 基础框架 文章 有了前面map和set封装的经验,容易写出下面的代码 // UnorderedSet.h#pragma once#include "HashTable.h"

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

Java封装构造方法

private/public的分装 被public修饰的成员变量或者是成员方法,可以被类的调用对象直接使用 而private修饰的成员变量和方法,不能被类的调用对象使用 例如: 可以看到我们是不能在main方法中直接调用被private修饰的变量 当然我们可以在我们定义的TestMode类中可以定一个方法show,然后在调用show方法实现 这里我们可以清楚了解 private 不光可以修

C++数据结构重要知识点(5)(哈希表、unordered_map和unordered_set封装)

1.哈希思想和哈希表 (1)哈希思想和哈希表的区别 哈希(散列、hash)是一种映射思想,本质上是值和值建立映射关系,key-value就使用了这种思想。哈希表(散列表,数据结构),主要功能是值和存储位置建立映射关系,它通过key-value模型中的key来定位数组的下标,将value存进该位置。 哈希思想和哈希表数据结构这两个概念要分清,哈希是哈希表的核心思想。 (2)unordered

Windows下使用MinGW编译安装zmq的步骤

背景: 在开发过程中,需要使用zmq库进行数据交互,因此需要编译zmq库。 安装步骤 软件下载 https://github.com/zeromq/libzmq.git 下载,将代码切换到git checkout 4c6cff6391分支 软件编译 cd .\libzmq\mkdir buildcd .\build\cmake -G "MinGW Makefiles" -DCMA

OOP三个基本特征:封装、继承、多态

OOP三个基本特征:封装、继承、多态 C++编程之—面向对象的三个基本特征 默认分类 2008-06-28 21:17:04 阅读12 评论1字号:大中小     面向对象的三个基本特征是:封装、继承、多态。     封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。   封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信

Android 优雅封装Glide

文章目录 Android 优雅封装Glide核心思想定义策略接口定义图片选项实现Glide策略图片管理类使用 Android 优雅封装Glide 核心思想 使用策略模式实现不同图片加载框架的切换,使用建造者设计模式处理不同参数,最后通过 ImageLoader 进行管理。 定义策略接口 interface ILoaderStrategy {fun loadImage(co

JS 封装方式

引言:本人是后台服务端开发的,前端的 js 都是在 html 中的 script 标签中写的,处理下数据啥,如果要有需要公共使用的方法啥的都是把方法直接丢在一个 js 文件里,然后 html 引入使用,没有关注过 js 的封装。这天突然对 js 的封装有了兴趣所以有了本文,一下是本人的一些见解。不深见谅。 素材使用的是若依框架中的 ry-ui.js 以及 vue.js ,这里只说封装,不说功能。

el-table 封装表格(完整代码-实时更新)

最新更新时间: 2024年9月6号 1. 添加行内编辑、表头搜索 <template><!-- 简单表格、多层表头、页码、没有合并列行 --><div class="maintenPublictable"element-loading-background="rgba(255,255,255,0.5)"><!--cell-style 改变某一列行的背景色 --><!-- tree-props