"SEDA为的缩写阶段式服务器模型,并分解一个复杂的,事件驱动的应用程序为一组的阶段由连接队列 ".
我知道这是一个架构,并且SEDA有很多实现(参见维基百科文章).什么是"舞台"?有人可以提供有关分阶段事件驱动架构的全面高级摘要,以及它与传统(未分级?)事件驱动架构的区别吗?
寻找书籍,博客,网站或视频.
目前,我从Udi Dahan和Greg Young的博客中获得了很多价值,但我想知道是否还有其他专家值得一试?
我是EDA的新手,我已经阅读了很多关于福利的内容,并且可能有兴趣在我的下一个项目中应用它,但仍然没有理解.
在举办活动时,哪种模式最适合:
我问这个问题是因为我们的一些活动可能很繁重而且频繁.
谢谢你的答案和时间.
我已经调查了很多地方,并且听到了许多可疑的主张,不论在哪里都PreparedStatement应该是首选Statement,即使只是为了表现的好处; 一直到声称PreparedStatements应该专门用于批处理语句,而不是其他任何东西.
但是,我所遵循的(主要是在线)讨论似乎存在盲点.让我提出一个具体的方案.
我们有一个EDA设计的应用程序和数据库连接池.事件来了,其中一些需要持久性,一些则不需要.一些是人工生成的(例如,每隔X分钟更新/重置一次).有些事件是顺序处理的,但其他类型的事件(也需要持久性)可以(并且将会)同时处理.
除了那些人工生成的事件之外,没有关于需要持久性的事件如何到来的结构.
这个应用程序是在很久以前设计的(大约是2005年),并且支持多个DBMS.典型的事件处理程序(需要持久性):
如果事件需要批处理,则语句将准备一次并使用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=true和cachePrepStmts=true用于连接器/ J,并使用两种useServerPrepStmts=true或useServerPrepStmts=false打电话时仍然导致警告有关效率close()上PreparedStatement的情况下,每一个非成批的SQL语句.
我们正在考虑使用事件驱动架构 (EDA) 来集成我们的一些粗粒度业务服务,并且这些服务 (REST) 的服务器端在 Java 和 .NET (C#) 中实现。我们最初认为使用 RabbitMQ(和 AMQP 协议)作为一种中立和开放的手段(在这两种语言中具有良好的客户端支持),但这意味着必须支持 Java 和 CLR 之外的另一个运行时(Erlang)。我们也在关注 Apache qPid,因为它具有 AMQP 协议的 Java 代理实现,这可能会消除这种担忧。
有没有人有尝试在 ActiveMQ 之上使用更丰富的 Apache Camel ESB 以 Pub-Sub EDA 方式集成 Java 和 .NET 服务的经验?我是否错过了有关通过此路线的任何其他可能的建议?
谢谢
就不同类型的请求而言,智能端点和哑管道怎么样?
读完后,我想订阅一些事件并处理它就足够了。但现在我意识到有时你应该开放API(也许不是为最终客户,而是为API网关等)。这个可以吗?或者您应该“事件化”(转换为事件)任何传入微服务云的请求?
例如,您有发票和订单服务。很明显,创建订单时,您可能会使用发票服务可能使用的事件来创建发票。很明显,为了接收最后一个用户的订单列表,您可以在订单服务端使用 CQRS,甚至只是创建新服务 LastOrders,它将仅保留所需数据的投影。但是这个请求是否应该转换为事件,或者 LastOrders 应该为此提供 API 并监听事件以更新它自己的数据库?
我正在尝试用Python编写电路原理图绘制工具.我正在创建一个基于字典的简单数据库,它包含所有组件及其属性.我还试图创建一种简单的查询语言,您可以选择,例如,所有电阻值> 100欧姆或足迹='0402'
到目前为止,我可以使用一些原始谓词搜索选择事物,然后使用联合和交集来处理更复杂的事情.
但是,我很难定义纯粹否定搜索的语义应该是什么.例如,像
足迹!='0402'
应该选择占地面积不等于0402的所有项目.但仅使用交叉点进行此操作会给我一个空白结果.为此,我需要选择所有组件,然后与"not 0402"相交以删除我不想要的组件.
但这似乎是一种蛮力,似乎是一种可疑的解决方案.我对使用"真正的"数据库和查询语言不感兴趣,所以请不要这么做.我在这里寻找合适的工程原理,不一定是解决问题的方法.
这个问题在SICP的书中得到了一定程度的介绍,但我很困惑,因为我认为他们也在使用延续和东西,我还没有.
有人可以解释一下"正确"用法应该是什么,以消极地选择东西.我在商业CAD工具想这和它的工作如预期,但我已经看到了一些SQL查询的例子(我认为),它选择的事情第一,然后删除不需要的人.
谢谢
迈克尔
在我的域中发布事件后,我不断收到来自我的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) 试图从丝网印刷中隐藏我所有的零件代号。有没有一种更快的方式隐藏所有内容而无需单独双击每个部分?
还有一种方法可以全局设置指示符的字体和大小。我的设计是非常小的PCB尺寸,因此至关重要的是我将其缩小到默认尺寸。
ps。关闭Grind-pin警告是我应该关注的事情吗?
eda ×9
event-driven ×3
soa ×3
architecture ×2
cqrs ×2
amqp ×1
apache-camel ×1
c# ×1
circuit ×1
electronics ×1
esb ×1
event-store ×1
events ×1
java ×1
jdbc ×1
messaging ×1
nservicebus ×1
python ×1
sql ×1
stage ×1