标签: eda

什么是SEDA(分阶段事件驱动架构)?

SEDA:用于良好可扩展的互联网服务的架构

"SEDA为的缩写阶段式服务器模型,并分解一个复杂的,事件驱动的应用程序为一组的阶段由连接队列 ".

我知道这是一个架构,并且SEDA有很多实现(参见维基百科文章).什么是"舞台"?有人可以提供有关分阶段事件驱动架构的全面高级摘要,以及它与传统(未分级?)事件驱动架构的区别吗?

architecture stage event-driven eda

28
推荐指数
3
解决办法
2万
查看次数

了解事件驱动架构的良好资源

寻找书籍,博客,网站或视频.

目前,我从Udi Dahan和Greg Young的博客中获得了很多价值,但我想知道是否还有其他专家值得一试?

architecture messaging soa event-driven eda

27
推荐指数
1
解决办法
5094
查看次数

事件驱动的体系结构和事件结构

我是EDA的新手,我已经阅读了很多关于福利的内容,并且可能有兴趣在我的下一个项目中应用它,但仍然没有理解.

在举办活动时,哪种模式最适合:

  1. 将事件命名为"CustomerUpdate",并包含有关客户的所有信息(已更新或未更新)
  2. 将事件命名为"CustomerUpdate",并仅包含实际已更新的信息
  3. 将事件命名为"CustomerUpdate"并包含最小信息(标识符)和/或URI,以便使用户检索有关此客户的信息.

我问这个问题是因为我们的一些活动可能很繁重而且频繁.

谢谢你的答案和时间.

soa events event-driven eda

10
推荐指数
1
解决办法
2078
查看次数

在单次执行后关闭PreparedStatement - 这是一个设计缺陷吗?

我已经调查了很多地方,并且听到了许多可疑的主张,不论在哪里都PreparedStatement应该是首选Statement,即使只是为了表现的好处; 一直到声称PreparedStatements应该专门用于批处理语句,而不是其他任何东西.

但是,我所遵循的(主要是在线)讨论似乎存在盲点.让我提出一个具体的方案.


我们有一个EDA设计的应用程序和数据库连接池.事件来了,其中一些需要持久性,一些则不需要.一些是人工生成的(例如,每隔X分钟更新/重置一次).有些事件是顺序处理的,但其他类型的事件(也需要持久性)可以(并且将会)同时处理.

除了那些人工生成的事件之外,没有关于需要持久性的事件如何到来的结构.

这个应用程序是在很久以前设计的(大约是2005年),并且支持多个DBMS.典型的事件处理程序(需要持久性):

  • 从池中获取连接
  • 准备sql语句
  • 执行预备声明
  • 处理结果集(如果适用),将其关闭
  • 密切准备的声明
  • 如有必要,准备一份不同的陈述并以同样的方式处理
  • 返回池连接

如果事件需要批处理,则语句将准备一次并使用addBatch/ executeBatch方法.这是一个明显的性能优势,这些情况与此问题无关.


最近,我收到一个意见,即准备(解析)一个语句,执行一次和关闭本质上是一种滥用的整个想法PreparedStatement,无论是否使用服务器或客户端预处理语句以及典型的DBMS,都提供零性能优势(Oracle,DB2,MSSQL,MySQL,Derby等)甚至不会将这样的语句提升到预处理语句缓存(或者至少,它们的默认JDBC驱动程序/数据源不会).

此外,我不得不在MySQL的开发环境中测试某些场景,似乎Connector/J使用分析器同意这个想法.对于所有非批处理的预处理语句,调用close()print:

PreparedStatement created, but used 1 or fewer times. It is more efficient to prepare statements once, and re-use them many times


由于前面概述的应用程序设计选择,拥有一个PreparedStatement实例缓存来保存连接池中每个连接的任何事件使用的每个单独的SQL语句听起来都是一个糟糕的选择.

有人可以进一步详细说明吗?逻辑"准备 - 执行(一次) - 关闭"是否存在缺陷并且基本上不鼓励?

PS显式指定useUsageAdvisor=truecachePrepStmts=true用于连接器/ J,并使用两种useServerPrepStmts=trueuseServerPrepStmts=false打电话时仍然导致警告有关效率close()PreparedStatement的情况下,每一个非成批的SQL语句.

java jdbc eda

6
推荐指数
1
解决办法
2864
查看次数

用于 C# 和 Java EDA 的 Apache Camel ESB

我们正在考虑使用事件驱动架构 (EDA) 来集成我们的一些粗粒度业务服务,并且这些服务 (REST) 的服务器端在 Java 和 .NET (C#) 中实现。我们最初认为使用 RabbitMQ(和 AMQP 协议)作为一种中立和开放的手段(在这两种语言中具有良好的客户端支持),但这意味着必须支持 Java 和 CLR 之外的另一个运行时(Erlang)。我们也在关注 Apache qPid,因为它具有 AMQP 协议的 Java 代理实现,这可能会消除这种担忧。

有没有人有尝试在 ActiveMQ 之上使用更丰富的 Apache Camel ESB 以 Pub-Sub EDA 方式集成 Java 和 .NET 服务的经验?我是否错过了有关通过此路线的任何其他可能的建议?

谢谢

c# esb eda apache-camel amqp

5
推荐指数
1
解决办法
4938
查看次数

微服务方法中的 API 与事件

就不同类型的请求而言,智能端点和哑管道怎么样?

读完后,我想订阅一些事件并处理它就足够了。但现在我意识到有时你应该开放API(也许不是为最终客户,而是为API网关等)。这个可以吗?或者您应该“事件化”(转换为事件)任何传入微服务云的请求?

例如,您有发票和订单服务。很明显,创建订单时,您可能会使用发票服务可能使用的事件来创建发票。很明显,为了接收最后一个用户的订单列表,您可以在订单服务端使用 CQRS,甚至只是创建新服务 LastOrders,它将仅保留所需数据的投影。但是这个请求是否应该转换为事件,或者 LastOrders 应该为此提供 API 并监听事件以更新它自己的数据库?

soa eda cqrs event-sourcing microservices

5
推荐指数
1
解决办法
3165
查看次数

需要帮助在python中选择简单数据库中的项目

我正在尝试用Python编写电路原理图绘制工具.我正在创建一个基于字典的简单数据库,它包含所有组件及其属性.我还试图创建一种简单的查询语言,您可以选择,例如,所有电阻值> 100欧姆或足迹='0402'

到目前为止,我可以使用一些原始谓词搜索选择事物,然后使用联合和交集来处理更复杂的事情.

但是,我很难定义纯粹否定搜索的语义应该是什么.例如,像

足迹!='0402'

应该选择占地面积不等于0402的所有项目.但仅使用交叉点进行此操作会给我一个空白结果.为此,我需要选择所有组件,然后与"not 0402"相交以删除我不想要的组件.

但这似乎是一种蛮力,似乎是一种可疑的解决方案.我对使用"真正的"数据库和查询语言不感兴趣,所以请不要这么做.我在这里寻找合适的工程原理,不一定是解决问题的方法.

这个问题在SICP的书中得到了一定程度的介绍,但我很困惑,因为我认为他们也在使用延续和东西,我还没有.

有人可以解释一下"正确"用法应该是什么,以消极地选择东西.我在商业CAD工具想这和它的工作如预期,但我已经看到了一些SQL查询的例子(我认为),它选择的事情第一,然后删除不需要的人.

谢谢
迈克尔

python sql circuit eda

2
推荐指数
1
解决办法
369
查看次数

NServicebus发布事件 - 收到空消息

在我的域中发布事件后,我不断收到来自我的denormalizer主机的以下消息:

2011-07-22 14:18:32,374 [Worker.5] WARN  NServiceBus.Unicast.UnicastBus [(null)]
 <(null)> - Received an empty message - ignoring.
Run Code Online (Sandbox Code Playgroud)

我只是使用jolivers eventstore执行此操作:

return Wireup.Init()
                .UsingRavenPersistence("EventStore", new DocumentObjectSerializer())
                .UsingAsynchronousDispatcher()
                .PublishTo(new DelegateMessagePublisher(c => container.Resolve<IPublishMessages>().Publish(c)))
                .Build();
Run Code Online (Sandbox Code Playgroud)

IPublishMessages解析为:

 public sealed class NServiceBusPublisher : IPublishMessages
{
    private const string AggregateIdKey = "AggregateId";
    private const string CommitVersionKey = "CommitVersion";
    private const string EventVersionKey = "EventVersion";
    private const string BusPrefixKey = "Bus.";
    private readonly IBus bus;

    public NServiceBusPublisher(IBus bus)
    {
        this.bus = bus;
    }

    public void Dispose()
    {
        GC.SuppressFinalize(this);
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

domain-driven-design nservicebus eda cqrs event-store

1
推荐指数
1
解决办法
2636
查看次数

Altium Designer隐藏丝印中的所有指示符图例?

试图从丝网印刷中隐藏我所有的零件代号。有没有一种更快的方式隐藏所有内容而无需单独双击每个部分?

还有一种方法可以全局设置指示符的字体和大小。我的设计是非常小的PCB尺寸,因此至关重要的是我将其缩小到默认尺寸。

ps。关闭Grind-pin警告是我应该关注的事情吗?

electronics eda altium-designer

1
推荐指数
1
解决办法
904
查看次数