我最近使用了 Expression Blend,我发现它有一个叫做 Visual State Manager 的东西,它和常规的事件驱动模型有什么区别,哪个更好?
我一直在寻找有关Java中异步I/O的优点的详细信息,特别是从应用程序堆栈设计.
我遇到过很多事件驱动服务器的例子,如Node.js,Tornedo等.
我无法理解的是,为什么在Java EE中使用JBoss或Weblogic应用服务器的整个应用程序堆栈迁移到事件驱动的体系结构.
甚至这些服务器也支持非阻塞I/O. 是的,他们正在为每个请求分配一个线程,但是如果有一个线程池,资源是不是在良好的性能参数范围内呢?
请按以下方式向我提供一些意见.
我想知道如何在 Rust 中使用带有回调的可组合事件驱动设计。根据我现有的实验,我开始怀疑 Rust 中的所有权系统更适合自上而下的过程代码,并且在事件驱动设计中回调所需的父对象的引用方面存在问题。
本质上,我希望看到以下 C++ 代码的 Rust 等效项。该代码实现了一个使用繁忙循环调度 Timer 事件的 EventLoop、一个带有 timer_expired 回调的 Timer 类以及一个以 500 毫秒为间隔调度计时器的 User 类。
#include <stdio.h>
#include <assert.h>
#include <list>
#include <chrono>
#include <algorithm>
using namespace std::chrono;
// Wrapping code in System class so we can implement all functions within classes declarations...
template <typename Dummy=void>
struct System {
class Timer;
class EventLoop {
friend class Timer;
private:
std::list<Timer *> m_running_timers;
bool m_iterating_timers;
typename std::list<Timer *>::iterator m_current_timer;
void unlink_timer (Timer *timer)
{
auto it …
Run Code Online (Sandbox Code Playgroud) 是否可以将 javascript 回调传递给 WebAssembly?我们可以从 WebAssembly 触发一个事件并在 javascript 中收听它吗?
在微服务架构中,我们通常有两种微服务通信的方式。假设服务 A 需要从服务 B 获取信息。第一个选项是远程调用,通常通过 HTTPS 同步,因此服务 A 查询服务 B 托管的 API。
第二种选择是采用事件驱动架构,其中服务 B 的状态可以以异步方式由服务 A 发布和消费。使用此模型,服务 A 可以使用来自服务 B 的事件的信息更新其自己的数据库,并且所有查询都在此数据库中本地进行。这种方法的优点是可以更好地分离微服务,从开发到运营。但它有一些与数据复制相关的缺点。
第一个是磁盘空间的高消耗,因为相同的数据可以驻留在需要它的微服务的数据库中。但在我看来,第二个最糟糕:如果服务 B 不能按需要快速处理其订阅,或者在服务 B 上创建它的同时它不能用于服务 A,则数据可能会变得陈旧,因为模型的最终一致性。
假设我们使用 Kafka 作为事件中心,其主题配置为使用 7 天的数据保留期。当服务 B 发布其状态时,服务 A 保持同步。两周后,新服务 C 部署完毕,其数据库需要使用服务 B 拥有的所有信息进行充实。由于最旧的事件已经消失,我们只能从 Kafka 主题中获取部分信息。我的问题是我们可以使用哪些模式来实现此微服务的数据库丰富(除了要求服务 B 将其所有当前状态重新发布到事件中心)。
event-driven eventual-consistency database-replication apache-kafka microservices
我们都同意,通过 HTTP 调用通信微服务的常用请求-响应方式会导致它们之间的耦合。这使我们采用了事件驱动的方法,其中服务发布一些其他服务将对其做出反应的事件。为此,我们可以使用一些中间件,可以是来自 AMQ、RabbitMQ、Kafka 等的任何东西。
然而,反应式编程社区也确实创建了一些优秀的项目,例如 Project Reactor 或 RxJava,它们将 HTTP 通信转换为伪消息驱动的解决方案。再者,随着RSocket等协议的到来,该模型也到达了TCP/IP应用层。
RSocket/Reactive 微服务真的可以被认为是事件驱动的解决方案吗?它们不只是提高传统请求-响应系统性能的一种方式吗?
换一种方式说:那些 Rsocket+Reactor 微服务不是仍然像以前基于 HTTP 的微服务一样完全耦合吗?
在哪些场景中更推荐它们中的每一个?
event-driven apache-kafka project-reactor microservices rsocket
我们正在引入 SNS + SQS 来处理我们的微服务架构中的事件生产和传播,到目前为止,我们的微服务架构依赖于 HTTPS 调用来相互通信。我们正在考虑将多个 SQS 队列连接到一个 SNS 主题上。然后队列中的事件将由 lambda 或在 EC2 中运行的服务使用。
我的问题是,主题应该如何通用?我们什么时候应该创建新主题?
假设我们有一个用户域,它需要发布两个事件——创建和删除。我们正在考虑的两个选项是:
选项 A:有两个主题,“用户创建”和“用户删除”。每个主题保证一个单一的事件类型。
选项 B:有一个主题“用户”,它接受多种事件类型
消费者将有额外的责任过滤事件或根据事件的类型采取不同的行动(他们还可以配置他们的队列订阅来过滤某些事件类型)
可以确保每个主题有一个发布者
有没有人对这两种选择有强烈的偏好,为什么会这样?
在相关说明中,您将在哪里包含每个资源的云配置?(队列资源创建应该与消费者一起部署,还是应该独立于任何发布者/消费者?)
我正在致力于使用 GCP Pub/Sub 实现事件驱动。
我有一个名为订单的主题,该主题将有一个名为的订阅orderPlacedSubscription
我有两个服务想要侦听此订阅的所有消息并执行不同的操作,所以我有 paymentService 和 notificationService, paymentService 将侦听由orderPlacedSubscription
并处理付款以及通知服务将侦听相同的消息并发送通知。
我想澄清一下在实现 DDD(领域驱动设计)的 EDA 系统(具有事件驱动架构的系统)中实现不同类型事件的方式。假设我们没有使用事件溯源。
更具体地说,阅读相关文章后,似乎有 3 种事件:
"type": "paycheck-generated",
"event-id": "537ec7c2-d1a1-2005-8654-96aee1116b72",
"delivery-id": "05011927-a328-4860-a106-737b2929db4e",
"timestamp": 1615726445,
"payload": {
"employee-id": "456123",
"link": "/paychecks/456123/2021/01" }
}
Run Code Online (Sandbox Code Playgroud)
{
"type": "customer-updated",
"event-id": "6b7ce6c6-8587-4e4f-924a-cec028000ce6",
"customer-id": "01b18d56-b79a-4873-ac99-3d9f767dbe61",
"timestamp": 1615728520,
"payload": {
"first-name": "Carolyn",
"last-name": "Hayes",
"phone": "555-1022",
"status": "follow-up-set",
"follow-up-date": "2021/05/08",
"birthday": "1982/04/05",
"version": 7
}
}
Run Code Online (Sandbox Code Playgroud)
{
"type": "customer-updated",
"event-id": "6b7ce6c6-8587-4e4f-924a-cec028000ce6",
"customer-id": "01b18d56-b79a-4873-ac99-3d9f767dbe61",
"timestamp": 1615728520,
"payload": {
"status": "follow-up-set",
"follow-up-date": "2021/05/10",
"version": 8
}
}
Run Code Online (Sandbox Code Playgroud)
上面的每个示例都来自 Khononov 的书(学习领域驱动设计:调整软件架构和业务策略)
说了前面的陈述,我想澄清以下问题:
(1)与其他有界上下文通信时,事件携带状态转移 …
architecture events domain-driven-design event-driven domain-events
我正在构建一个应用程序来使用 WASAPI 从设备捕获音频,其中使用的所有 API 都支持 Windows Vista 及更高版本的设备。
最初,我使用WASAPI Capture 作为共享计时器驱动模式从设备捕获音频,其中将有一个线程每 0 毫秒从设备捕获音频。它在 Windows Vista 及以上设备中工作的地方。
由于上述方法在 CPU 消耗方面效率不高,并且并非每项都经过优化,因此我尝试使用WASAPI Capture 作为共享事件驱动模式从设备捕获音频,其中仅当数据被系统触发事件时才会捕获音频。可用的。此方法确实完全降低了 CPU 消耗,但在 Windows VISTA 到 Windows Server 2016 设备中不起作用。
Initialization of audio client interface
音频接口使用共享模式初始化,并且给出的流标志用于 AUDCLNT_STREAMFLAGS_EVENTCALLBACK,因为我使用的是事件驱动模式。GetExtensibleMixFormat 方法提供使用 Windows 的 GetMixFormat() 获取的默认混合格式。
int enginelatency = 20;
HRESULT hr = _AudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK | AUDCLNT_STREAMFLAGS_LOOPBACK , enginelatency * 10000, 0, (WAVEFORMATEX*)mix_format_wasapicap_ptr->GetExtensibleMixFormat(), NULL);
Run Code Online (Sandbox Code Playgroud)
Initializing the event
其中 _AudioSamplesReadyEvent 是提供给 SetEventHandle 方法的句柄。当音频缓冲区准备好由客户端处理时,系统将触发此事件。
hr = _AudioClient->SetEventHandle(_AudioSamplesReadyEvent);
Run Code Online (Sandbox Code Playgroud)
尽管 Windows VISTA 及以上设备支持所有使用的 API,但无法弄清楚为什么在 …
event-driven ×10
apache-kafka ×2
events ×2
javascript ×2
amazon-sns ×1
amazon-sqs ×1
architecture ×1
blend ×1
callback ×1
io ×1
java ×1
performance ×1
rsocket ×1
rust ×1
shared ×1
vsm ×1
wasapi ×1
webassembly ×1