我的C#代码用于订阅多个OPC DA项目时,当第一个周期中存在"非质量"值时
我正在使用opclabs dll订阅远程opc da服务器的多个项目.从服务器中获取第一个(初始)值时,通常某些值带有质量"不良"或"不确定) "(尤其是当我订阅大量标签时).因此,在我的代码中,我正在检查所有值是否具有质量"良好",然后我接受了进一步处理的值并使用. 但是问题是:当所有初始值(订阅后的第一个值)都带有质量"良好"(并非总是如此)时,没有问题.但是,当我完全说70个标签,在第一个周期中,只有45个标签的质量为"良好",那么在二读周期中,读数完全读取了70-45 = 25个标签,全部读取,所有这些标签都具有质量这次"好". (我的意思是上一个周期的70个减值"良好"质量标签). 之后我没有任何错误,也没有例外.该代码只是等到总订阅时间(在我的情况下为10秒),然后退出.可能是什么问题呢?为什么我的代码停止读取更多值循环? public string item_no = ""; // amount of items public string
0 2024-04-24
编程技术问答社区
无网络依赖的进程间pubsub
假设我的计算机上没有安装网卡,我想拥有类似于以下功能的功能: Process 1将向某些URI发布消息,例如" URI1" var publisher = new Publisher("Uri1"); publisher.publish(new Message("Somedata"); Process 2都将在" URI1"上收听消息,并将消息发布到" URI2" var subscriber = new Subscriber("Uri1") subscriber.MessageReceived += data => Console.Writeline(data.ToString()); var publisher = new Publisher("Uri2") publisher.Publish(new Message("SomeMoreData")) Process 3将收听两个URIS的消息 var subscriber = new Subscrib
16 2024-04-24
编程技术问答社区
在实现中使用数据库时,观察者模式和pub-sub是否相同?
我试图了解观察者模式并陷入特定点.在我的理解中,一旦观察者订阅以在任何事件更改上通知它们,则将订阅存储在某个地方,然后当事件更改时,通知了订户. . 在实际情况下,由于持久原因,我应该将值存储在数据库或文件中,并在事件发生后通过从DB获取并循环浏览列表. . 这是正确的理解吗?我没有看到任何涉及数据库的示例,但是,每个示例都使用列表. 又一次出版商/订户模式也相似,除了更改,没有确切了解出版商和订户是谁,而MQ或某种类型的中级技术则用于在两个之间建立通信. . 我的问题是:当我们在观察者模式中使用DB时,它不会成为发布者/订阅者(除了在这里了解观察者和发布者).这是正确的理解吗? 解决方案 在大多数观察者模式的示例中,您会看到使用列表,但是该列表的初始化如何取决于您的应用程序.例如,与您的情况一样,具有大量订户的应用程序必须出于持久原因存储这些订户.我们不能指望如此大量的订户一直在内存中.因此,观察者的列表仅是从DB中初始化的,尽管并非所有条目一次.
2 2024-04-24
编程技术问答社区
公共/分册和基于内容的订阅
我处于设计将是事件驱动体系结构的系统的开头阶段(基本的Pub/Sub).实际的工具和框架尚未选择,因此这个问题比技术更概念性(尽管它将在.NET中完成). 对于这种情况,几乎完美的类比是财务交易系统.想象一下,一台服务器不断接收市场数据(实时或间隔 - 没关系).服务器将发布特定证券的定价更新.出于这个问题的目的,假设服务器正在"观看"和发布1000张证券. 有100个客户应用程序是此服务的订阅者.每个客户只对正在发布的证券的一小部分感兴趣. 如果客户端收到了所有1000个证券的消息,则必须分析它们,这显然会在客户端上创建更多的网络流量和更多的负载. 另一方面,在发布/路由时,必须在服务器端解析消息内容似乎会增加加载. 这种类型的体系结构通常如何处理? 解决方案 看一下RabbitMQ提供的一些教程 link 特别注意您可以使用路由和主题向适用的客户传递消息.这里的"服务器"可以简单地将消息放在队列上,客户可能会根据他们订阅的路由/主题来
4 2024-04-23
编程技术问答社区
在WCF服务和客户端之间共享接口(用ServiceContract标记)。
我正在使用VS2010和.NET 4.0. 我已经在此处签了(共享WCF中实现的界面服务),但它的不同之处在于,我要完成的目标涉及一个用serviceContract标记的接口. 即.在服务中,我有一个接口A(标记为ServiceCntract)和一个扩展接口B(也标记为ServiceCecntract). B由WCF服务实施. 确切的延伸沿此方法: public interface A public interface B : A (" specifictype"标记为数据合同.) 显然,B在代理生成过程中暴露于WCF客户端;但是,我也需要揭示接口A(我正在实现半代式酒吧/子系统,并且"发布者"需要能够检查/依靠接口A). 我尝试解决此问题的第一种方法是创建一个包含界面的单独的"共享"组件,并且可以由服务和客户端使用;但是,这最终的运作效果不佳,因为在发布者中,它需要确保B的实例实际上是从A中正确扩展的.这种隐
0 2024-04-20
编程技术问答社区
Redis Pub/Sub ServiceStack,取消线程
我不确定这个更通用的线程问题. ,但是我有一个WPF应用程序,可以订阅频道并聆听REDIS数据库的消息. App.SubscriptionThread = new Thread(() => { _redisSubscription.SubscribeToChannels("ChannelA", "ChannelB"); }); App.SubscriptionThread.Start(); 一旦我开始这个问题,我就不知道如何停止它. 我尝试过的东西. 使用Thread.Abort.显然,这并不能阻止它,因为线程刚刚陷入悬挂,然后永远不会停止(没有发生未取消的情况). 使用来自UI线程的_redisSubscription.UnSubscribeFromAllChannels().这也导致申请永远进入阻止状态 使用Environment.Exit(0)强行关闭.这个似乎可以解决问题.不幸的是,它也具有... ...关闭我的应用程序的
6 2024-04-19
编程技术问答社区
当失去网络连接时,ZMQ Pub | Sub程序失败了
我使用ZMQ 2.1在中型网络上具有简单的Pub-Sub设置.尽管有些订户正在使用C#绑定,但其他订户正在使用Python绑定,而我遇到的问题是相同的. 如果我从运行订户的机器中拉出网络电缆,我会发现一个不可捕获的错误,可以立即终止该订户. 这是python中订户的一个非常简单的示例(不是实际的生产代码,但足以复制问题): import zmq def main(server_address, port): context = zmq.Context() sub_socket = context.socket(zmq.SUB) sub_socket.connect("tcp://" + server_address + ":" + str(port)) sub_socket.setsockopt(zmq.SUBSCRIBE, "KITH1S2") while True: msg = sub_socket.r
4 2024-04-19
编程技术问答社区
在.NET中用RabbitMQ发布/订阅样本
我已经构建了此示例:>从.net中开始使用RabbitMQ ,但制作了2个程序: 一人出版商 一subscriber 我正在使用BasicPublish来发布和BasicAck在示例中聆听.如果我从发布者中运行一个发布者和几个订户,则每个"发送消息" - 只有一个订户获取它.因此,出版商将消息发送给订户有一些​​订单(作为订户开始),我想向所有订户发送一条消息.该样本有什么问题?可能是您可以通过RabbitMQ提供出版商/订阅者消息交换的工作示例? 解决方案 您链接到的示例在没有交换的情况下使用简单排队,这确保只有一个消费者才能处理该消息.要支持RabbitMQ中的Pub/Sub,您需要首先创建一个交换,然后让每个订户在该交换上绑定一个队列.然后,生产者将消息发送到交易所,将消息发布给已绑定到它的每个队列(至少使用简单的Fanout Exchange类型.可以通过直接和主题​​交换来实现路由.) ) 有关Java样本(可以很容易地将其转换为C#)这里.
6 2024-04-18
编程技术问答社区
C(libzmq)中的Zeromq Pub/sub示例
有人可以使用 pub.c #include #include int main() { void *context = zmq_ctx_new(); void *publisher = zmq_socket(context, ZMQ_PUB); zmq_bind(publisher, "tcp://127.0.0.1:5555"); char message[15] = "Hello World!"; while(1) { zmq_msg_t msg; zmq_msg_init_size(&message, strlen(message)); memcpy(zmq_msg_data(&msg), message, strlen(message)); zmq_msg_send(publisher, &msg, 0);
6 2024-04-09
编程技术问答社区
xmpp书签的自动连接选项不工作
我正在尝试使用XEP-0048-书签自动加入房间( http://xmpp .org/Extensions/xep-0048.html ). 我正在使用Robbiehanson Xmppframework,Ejabberd v13.x 到目前为止,我已经能够使用以下代码在房间中添加书签: -(void) createBookmarkforRoom:(NSString *)roomJid { NSXMLElement *nick = [NSXMLElement elementWithName:@"nick" stringValue:@"Marge"]; NSXMLElement *conference = [DDXMLNode elementWithName:@"conference"]; [conference addAttributeWithName:@"name" stringValue:@"BookmarkName"]; [confer
6 2024-04-01
编程技术问答社区
每个生产者的Kafka主题
可以说我有多个设备.每个设备都有不同类型的传感器.现在,我想将每个传感器的每个设备的数据发送到Kafka.但是我对Kafka主题感到困惑.用于处理此实时数据 每个设备都有KAFKA主题是好的,该设备中的所有传感器都会将数据发送到特定的Kafka主题,或者我应该创建一个主题并让所有设备将数据发送到该主题. 如果我使用第一种情况,那么我们将每台设备创建主题, device1(传感器A,B,C) - >主题1 device2(传感器A,B,C) - >主题2 我可以创建多少个主题? 这个型号会刻度吗? 案例2:在哪里,将数据发送到一个主题 device1(传感器A,B,C),Device2(传感器A,B,C).... Devicen .... - >主题 这不是数据的瓶颈.由于它的行为将以一些传感器的队列数据在队列中落后,并且不会实时处理. 此模型会刻度吗? 编辑 可以说,每个设备都与用户关联(许多).因此,我想根据设备处理数
14 2024-03-30
编程技术问答社区
Marionette Event Aggregator vs Backbone Router
我对这个世界很陌生,所以我需要一些澄清.也许我在这个主题上可能是错的.因此,请随时纠正我. 我正在研究木偶和骨干如何一起工作.哦耶. Marionette为我们提供了骨干的延伸.真的很不错的东西. 对我来说并不明显的是使用骨干提供的路由机制以及何时使用Marionette的出版商/订户模式. 是否有经验法则? 在这里a>,类似的讨论,但没有关于如何使用它或其他的建议. 解决方案 我对路线管理的看法在我的书中的免费预览中说明了我在木偶上的书(> http://samples.leanpub.com/marionette-gentle-indroduction-sample.pdf ) 基本上,我的意见(其他不一定共享)是,当用户通过URL"输入"应用程序时,应使用骨干的路由来配置应用程序状态.换句话说,它将解析参数并调用适当的控制器操作. 但是,一旦设置了初始状态,即使用户在应用程序中导航时,也不再触发路由代码. 这是一个示例: 用户进入
4 2024-03-26
编程技术问答社区
Redis与服务总线的pub/sub方案比较
我在Azure中有几种服务,我想使用某种酒吧/子服务在它们之间进行更改. 我正在研究Redis和Azure Service Bus. 要同步的数据非常简单 - 主要是100个字符 我想知道我的首选选择是什么 - 或者如果我朝着正确的方向. 我的要求很简单: 低潜伏期 - 许多小型操作 可选 - 能够在本地安装解决方案,而不是在Azure 解决方案 不要为此使用redis. redis pubsub并不可靠(这是 fire-and-forget ).当Redis发布消息时没有人听,会发生什么?它永远丢失了,这意味着您的服务不会同步... 也许您没有听说 Azure Pack .它不是本地的完整的azure,但它包括服务总线.如果您从公共或私有云中使用它,那应该没有问题. 请注意,您可以使用REDIS实现可靠的消息传递,但不能在默认的 pubsub 上实现. REDIS和Service Bus的可能替代方法应为 rabbitmq .
10 2024-03-26
编程技术问答社区
Azure IoT Hub-"订阅 "代码不工作。"连接被拒绝"
当某些数据发布到MQTT主题devices/device_id/messages/events/时,我正在尝试从IoT中心接收"通知".要接收数据,我使用以下主题:devices/device_id/messages/devicebound/.我的订阅代码在下面(python): import paho.mqtt.client as mqtt import ssl, random from time import sleep root_ca = "./certs/digicertbaltimoreroot.pem" public_crt = './certs/rsa_cert.pem' private_key = './certs/rsa_private.pem' iothub_name = "myhub" device_id = "mydevice" mqtt_url = "{}.azure-devices.net".format(iothub_name) mqtt_port
8 2024-03-25
编程技术问答社区
Azure事件中心和多个消费者群体
在以下情况下使用Azure事件中心时需要帮助.我认为消费者群体可能是这种情况的正确选择,但是我无法在线找到具体的示例. 这是对问题的粗略描述,也是使用事件中心的提议解决方案(我不确定这是最佳解决方案.是否会感谢您的反馈) 我有多个事件源,它们生成大量事件数据(来自传感器的遥测数据),这些事件数据需要保存到我们的数据库中,并且某些分析(例如平均运行平均值),Min-Max应该在 Parallel . 发件人只能将数据发送到一个端点,但是事件中心应将此数据可用于两个数据处理程序. 我正在考虑使用两个消费者组,第一个将是一组工人角色实例,这些实例将数据保存到我们的钥匙值商店,第二个消费者组将是一个分析引擎(可能会伴随 azure流分析). ) 首先,我如何设置消费者组,并且我需要在发件人/接收器方面做些事情,以便在所有消费者组上出现事件的副本? 我确实在线阅读了许多示例,但是它们要么使用client.GetDefaultConsumerGroup();和/或通
6 2024-03-25
编程技术问答社区
自动过期的无主订阅(Azure ServiceBus Messaging SubscriptionClient)。
我想到的情况是:使用服务总线用于实例到现实的通信,因此订阅是每个服务实例唯一的.最终结果是,如果实例不优雅地关闭,则其订阅不会被删除. 当服务实例"死亡"并重新启动时,订阅的先前内容无关紧要,可以丢弃. 那么,是否有一种方法可以为服务总线订阅或模拟类似的东西设置"生活时间",而无需诉诸某些自定义孤儿检测机制? 解决方案 该确切特征在下一个版本之一的积压库上.也就是说,在Azure中,您可以通过"角色环境"来创建订阅的名称,从而具有重新启动的实例重复使用订阅.实例ID名称稳定. 编辑:该功能是autodeleteonidle httpps:///learn.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptionDescription 其他解决方案 从Azure SDK 2.0开始,这是预期的. 另外,与其他报告相反,在我的测试中,只要有待处理的接收器收听该订
4 2024-03-23
编程技术问答社区
在背景线程上触发事件
我的歉意,我的问题和努力并不准确.我正在开发具有不同组件的控制台应用程序.现在,我已经将它们解耦,并希望它们使用异步发布者/订户方式进行交互.类似于WPF.因此,在这种情况下,我将拥有一个主线程,该线程将始终存在,并根据要求,它将调用事件,例如DatareQuested将在背景线程上触发.背景线程完成过程后,它将再次触发事件,例如数据已完成,该数据应返回到调用线程,即主线程.我希望我在解释中清楚. So far I have coded below; where I have EventBroker. public class EventBroker { public static event EventHandler SubscriptionAdded; public static event EventHandler SubscriptionRemoved; private static volatile Even
6 2024-03-18
编程技术问答社区
使用阻塞的REST请求来实现发布/订阅
最近,我被要求调查与想要进行电话事件的电话系统供应商集成的可行性(例如,线铃,接听线路接听,呼叫已清理)使用RESTFULE WEB服务. 我指出,休息是一个请求/响应协议,他们正在进行发布/订阅.他们建议的解决方案是提出HTTP REST请求,该请求将阻止并最终在可用事件或超时的情况下做出响应. . 无论哪种方式,都将提出另一个请求以获取下一个事件,等等. 这个想法使我感到畏缩,但我确信iPhone"推"电子邮件是这样运行的. 这是合理的休息吗? 解决方案 我会说,它与剩余的体系结构样式相对不佳(主要是因为REST将其限制为无状态客户端服务器的交互).但是,尽管没有网络的精神,但网络充满了进行长期投票的解决方案,并且或多或少. 首先,关于架构的注释:在REST中实现Pub/sub仅意味着发布者将项目添加到列表中,然后将其添加给订户.订户对列表进行了调查.有多种方法可以制定此操作,以确保一键和仅一致的同时保持消息顺序和(一种)保证交付的形式,尽管异
0 2024-03-18
编程技术问答社区
直接从Angular客户端订阅Azure事件网格主题
我正在研究一个需要响应第三方Webhook事件的应用程序.我选择了Azure事件网格作为我选择的事件经纪人,前端的Angular和后端的ASP.NET核心. 在我当前的解决方案中,我使用HTTP触发了Azure函数从Webhook发表到Azure事件网格.此函数将第三方事件格式化为正确的Azure事件网格格式(有关事件用户作为主题,并类型为Webhook事件类型).目前,使用Webhook Azure事件网格订阅将事件网格事件推到我的ASP.NET后端. 我的问题是,某些事件仅涉及前端(例如提醒/光通知),因此我想直接将事件从事件网格到前端发布,而无需使用Websocket到后端的端点. 我目前正在使用SignalR来创建Angular和ASP.NET Core之间的WebSocket连接,但是我不想将后端超载与发送将仅重定向到Angular的事件超载. 是否有一种方法可以直接使用Websocket连接订阅Azure事件网格?在最小推动/轮询方面,最佳解决方案是什
6 2024-03-09
编程技术问答社区
如何在C++中用ZeroMQ中的中介来同步扩展的PUB-SUB模式的发布者和订阅者?
我在带有1个中介的用例中有多个发布者和多个订户. 在Zeromq指南中,我使用其他 REQ/REP 插座了解了同步1个发布者和1个订户.我尝试为我的用例编写同步代码,但是如果我尝试根据1-1 PUB/SUB的逻辑编写代码,那就变得凌乱了. . 当我们只有1个发布者为: 时,发布者代码是: //Socket to receive sync request zmq::socket_t syncservice (context, ZMQ_REP); syncservice.bind("tcp://*:5562"); // Get synchronization from subscribers int subscribers = 0; while (subscribers
4 2024-03-03
编程技术问答社区