【问题标题】:How to implement this Queue in a Jboss cluster?如何在 Jboss 集群中实现这个队列?
【发布时间】:2012-07-02 20:31:32
【问题描述】:

我的应用程序作为中间件工作,接收来自客户端的请求,然后将其转换为特定逻辑,并将转换后的请求作为普通 HTTP 请求或 Webservice soap 请求发送到另一个服务提供者。该应用程序部署在负载平衡器后面的两台 jboss 服务器(集群中)上。

假设我的应用程序是 A,服务提供者是 S。

现在我得知,每年 S 都会下降几 (3-5) 次。每次停机时间将持续约 4 小时。我可以得到一个关于停机时间的时间表。

在停机期间,A 不应再转换并向 S 发送请求,而是将接收到的请求放入队列中。 S回来后,应该处理队列中的请求。

注意:

  1. 收到的请求 A 必须按照它们来时的确切顺序进行处理。一个接一个。处理请求是指 A 向 S 发送转换后的请求,并获得响应成功或错误。通常这不会花费太多时间。

  2. 基于 1,当 A 处理排队的请求时,尽管 S 已经可用,但应将新的传入请求排入队列。直到队列为空,A 可以继续直接向 S 发送请求。

  3. A 每分钟收到 2-3 个请求。

由于我们有两个 Jboss,我计划在数据库中维护这个队列,线程在队列上工作并管理停机状态。但是,两个jboss之间的同步总是让我头疼。

很快,我遇到的问题是:

  • 如何设置停机时间标志,让两个jboss做请求入队,而不是发送。 (我认为的解决方案是,在处理每个请求之前,为此标志查询数据库。该标志是由线程设置的。这可能是更糟糕的解决方案。)

  • S回来后,如何设计两个jboss的Dequeue操作。 (看来,同时,总有一个jboss是空闲的……)

  • 如何通知两个jboss,“现在队列是空的,不要再入队了。”

逻辑有点复杂。我希望我清楚地解释了我的问题......

你们有什么想法吗?


更多关于 FIFO 的描述。 如果没有停机,A 可以并行处理来自不同客户端的请求。因为这种“交易喜欢”的订单是由客户确保的。例如。

client x :
-send http://..../createUser...
-received 'success' from A
-send http://../updateUser...
-received 'success' from A

如果 createUser() 失败,则不会发送 updateUser。

client y:
-send http://.. createCompany...

假设有另一个客户端 (y) 与 x.createUser 同时发送请求 createCompany。这两个请求可以由A并行处理。

一旦想到停机时间和队列:

-send http://..../createUser...
(downtime)
-received 'enqueue'
(S is back)
-send http://../updateUser...

现在“创建->更新”的顺序需要由 A 来确保,而不是客户端。


提前致谢!

肯特

【问题讨论】:

    标签: java multithreading queue cluster-computing


    【解决方案1】:

    您是否收到来自 S 的任何确认,即特定请求已正确接收? (如果没有,您应该考虑实现此功能以使您的应用更加健壮,并最大限度地减少由于网络问题、服务器崩溃等而丢失请求的机会。)

    这种确认机制可以通过使用增加超时的算法来增强,以防在发送请求后没有及时收到 ACK。 IE。如果在配置的超时间隔 t 内没有收到 ACK,则重新发送请求。下一次有更大的超时,例如2*t,然后 4*t 等等。只要实际请求未被确认,传入的较新请求就会排队。一旦实际请求成功传输,排队的请求将按 FIFO 顺序处理。如果队列为空,则恢复正常处理。

    该算法将自动处理 S 的计划停机时间以及任何其他网络故障等,但代价是处理和网络流量更多。但是每分钟有 2-3 个请求,这应该不是问题(当然,除非单个请求很大)。

    当然,它甚至可以改进为可以按时间段配置默认超时。 IE。对于 4 小时的计划停机时间,可以将默认超时设置为 4 小时。停机时间结束后,超时将重置为默认值。

    【讨论】:

    • A有一个错误处理,说我们有网络问题,那么A会得到一个相关的Exception,然后保存这个状态。但是没有“重试”机制。例如,如果遇到超时,则将此请求状态设置为“失败”。
    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2013-03-14
    相关资源
    最近更新 更多