我正在设计一种无状态服务,它基本上处理信息流,然后根据条件发送电子邮件。我希望在服务结构中托管此功能,如果发生故障,可以使用多个活动结构,但是如何限制仅从“主要”发送的电子邮件。
主动/主动仅对分区的有状态服务有效吗? 如果服务必须是主动/被动的,那么服务如何知道它现在是活动的?
答案 0 :(得分:2)
SF内部没有leader election(你可以使用)的内置机制。您可以使用blob lease。 领导者将是获得租约的人,并且需要在其活着的同时刷新它。如果它崩溃了,它将失去租约而另一个实例可以获得它。 这确实会引入外部依赖性,从而降低系统的总体可用性百分比。
您还可以创建一个类似的状态服务。
答案 1 :(得分:0)
由于几个原因,我将使用有状态服务:
答案 2 :(得分:0)
另一种选择是拥有一个处理数据流的无状态工作者池,然后无论何时想要发送电子邮件,它都会通知另一个服务(通过ServiceRemoting / Rest / ServiceBus /其他通信渠道)和此服务将处理实际发送的电子邮件。
如果此电子邮件发送服务是有状态的,则可以处理重复项,如果您有一个问题。