如何让我的静态事件桥工作 [英] How do I get my static Event Bridge working

查看:106
本文介绍了如何让我的静态事件桥工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





快速概述:



我有一项启动两个流程的服务:

1:基于消息的工作流程

2:基于事件的'跟踪器'



跟踪器处理几个三分之一推送数据(异步)或从中提取数据的派对API。我已设法将其设置为使得从每个API收集的所有数据都被引发为具有相同数据args的事件。我将所有事件流合并到一个Observable对象中。



我的工作流程开始并找出需要跟踪的id。它为每个跟踪器API创建了一个子工作流,它设置了对可观察对象的订阅。



Observable对象以及订阅方法是两者都是静态的同一个静态类。这是我的'活动桥':



Hi,

Quick overview:

I have a service that starts two processes:
1: A message based workflow
2: An event based 'tracker'

The tracker handles several third party APIs that either push data (async) or that we pull data from. I have managed to set this up so that all of the data collected from each API is raised as an event with identical data args. I merge all of the event streams into a single Observable object.

My workflow starts and finds out what id's need to be tracked. It created a sub-workflow for each of the tracker APIs, which set up a subscription to the observable object.

The Observable object, as well as the subscription method are both static in the same static class. This is my 'Event Bridge':

namespace WorkFlowEngine.EventBridge
{
 public static class TrackerEventHandler
 {
  public static IObservable<TrackerInstanceEventArgs> GetDataObservable()
  {
   return Observable
   .FromEvent<TrackerInstanceHandler, TrackerInstanceEventArgs>(handler =>
   {
    TrackerInstanceHandler dataHandler = e =>
    {
     handler(e);
    };
    return dataHandler ;
   },
   dataHandler => TrackerInstanceEvents.TrackerInstance += dataHandler ,
   dataHandler => TrackerInstanceEvents.TrackerInstance -= dataHandler 
  );
 }

 public static void SubscribeToTrackerInstanceHandler(int trackerInstanceId, int id, int? workflowId)
 {
  GetDataObservable().Where(fd => fd.TrackerInstanceId == trackerInstanceId).Subscribe(o => OnNext(o, id, workflowId));
 }

 public static void OnNext(TrackerInstanceEventArgs args, int id, int? workflowId)
 {
   //Parse data and create new workflow message
 }
}

//Also, TrackerInstance event is static:

...
 public class TrackerInstanceEvents 
 {
  public static event TrackerInstanceHandler TrackerInstance;

  public static void OnTrackerInstance(TrackerInstanceEventArgs args)
  {
   if (TrackerInstance != null)
     TrackerInstance(args);
  }
 }
...





问题是OnNext永远不会发射。



在触发事件之前正确调用SubscribeToTrackerInstanceHandler。事件确实传播到Observable



我创建了桥,这样我就可以连接两个进程(工作流和'跟踪器')。我的另一种方法是将这个类的实例传递给跟踪器,但我希望这会更好。



我对使用这个静态类或我的根本错了我关闭了吗?



谢谢^ _ ^





编辑 - 解决了:

GAH - 代码工作正常> _<



我没有设置TrackerInstanceEventArgs.TrackerInstanceId



请原谅我的愚蠢^ _ ^



The issue is that OnNext never fires.

SubscribeToTrackerInstanceHandler is called correctly and before the event is triggered. The event does propagate up to the Observable

I created the bridge so that I could link up the two processes (Workflow and 'tracker'). My alternative is to pass an instance of this class to the trackers, but I hoped this would be better.

Am I fundamentally wrong about the use of this static class or am I close?

Thanks ^_^


EDIT - Solved:
GAH - the code works fine >_<

I hadn't set TrackerInstanceEventArgs.TrackerInstanceId

Please forgive my stupidity ^_^

推荐答案

GAH - 代码工作正常> _<



我没有设置TrackerInstanceEventArgs.TrackerInstanceId



请原谅我的愚蠢^ _ ^
GAH - the code works fine >_<

I hadn't set TrackerInstanceEventArgs.TrackerInstanceId

Please forgive my stupidity ^_^


这篇关于如何让我的静态事件桥工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆