Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 删除RailsEventStore中的订阅_Ruby On Rails_Domain Driven Design_Cqrs_Event Sourcing_Rails Event Store - Fatal编程技术网

Ruby on rails 删除RailsEventStore中的订阅

Ruby on rails 删除RailsEventStore中的订阅,ruby-on-rails,domain-driven-design,cqrs,event-sourcing,rails-event-store,Ruby On Rails,Domain Driven Design,Cqrs,Event Sourcing,Rails Event Store,我正在尝试使用RailsEventStore在事件源/CQRS和DDD启发的Rails 5.2.x应用程序中构建事件流的持久关系投影 为了让我的投影仪接收新活动的通知,我正在使用Clientsubscribe,它工作得很好。我在Rails初始化文件中设置了投影仪订阅 现在,当我运行测试时,大多数测试都不需要有事件流的投影。因此,我只希望订阅高度集成的测试 因为我的初始化器似乎只运行一次,在执行任何单独的测试之前,我需要在测试初始化中订阅/取消订阅投影仪。遗憾的是,我没有找到任何Clientuns

我正在尝试使用RailsEventStore在事件源/CQRS和DDD启发的Rails 5.2.x应用程序中构建事件流的持久关系投影

为了让我的投影仪接收新活动的通知,我正在使用Clientsubscribe,它工作得很好。我在Rails初始化文件中设置了投影仪订阅

现在,当我运行测试时,大多数测试都不需要有事件流的投影。因此,我只希望订阅高度集成的测试

因为我的初始化器似乎只运行一次,在执行任何单独的测试之前,我需要在测试初始化中订阅/取消订阅投影仪。遗憾的是,我没有找到任何Clientunsubscribe方法的痕迹

在我已经订阅了活动流之后,有没有办法取消订阅?或者在RailsEventStore中是否有更好的方法来处理这种情况?

没有客户取消订阅的方法。相反,每个订阅都会返回一个lambda,您可以调用该lambda来撤销订阅:

irbmain:001:0>事件存储 => irbmain:002:0>my_handler=->event{} => irbmain:003:0>revoke=event\u store.subscribebemy\u处理程序,收件人:[订单::订单已提交] => irbmain:004:0>revoke.call =>[Ordering::OrderSubmitted] 或者在RailsEventStore中是否有更好的方法来处理这种情况

我的同事Rafał描述了如何根据测试用例启用或禁用特定订阅者。简言之,想法是为每个测试提供新的事件存储实例,并基于测试元数据筛选订阅者列表

有了新的event_store instance per test,您就不必再取消订阅了,而且一开始就没有订阅服务器。例如,您可以在集成测试用例中显式订阅:

def集成_与_读取_模型 事件\存储区.订阅::菜单提供程序.方法:处理\菜单\提供\选择,发送至:[菜单提供已接受] 事件\存储。订阅::菜单提供。方法:处理\菜单\提供\被拒绝,收件人:收件人:[MenuOfferdClined] 事件存储区。订阅::MenuOffer.method:handle_menu_offer_offer_正在挂起,收件人:[MenuOfferIsPending] 事件存储区。订阅::菜单提供程序。方法:处理菜单提供程序集,收件人:[菜单提供程序集] 终止 before:each{integrate_with_read_model}