如何在IBM Integration Bus中限制每个IP地址的HTTP请求数量?

时间:2019-07-17 05:48:01

标签: http ibm-integration-bus

有一个暴露给多个通道的IIB HTTP SOAP服务-该服务具有4个操作,并且其中一个操作被特定的通道非常频繁地使用(每秒少于1个事务)。

IBM Integration Bus(代理或服务级别)中是否有任何方法可以将每个通道(IP地址)的HTTP请求数限制为每秒1或n个事务?

3 个答案:

答案 0 :(得分:1)

如上所述,这种逻辑应该在IIB之外进行。如果您全局需要它。

在IIB级别上,您可以配置很多东西,例如最大连接数,但是没有逻辑让每个用户拥有这种池。

我认为,最好的解决方案是使用专门用于这种逻辑的网络组件。就我而言,我决定在IIB服务器前面的负载均衡器上实施此规则。代理可能也可以这样做。

对于您的特定情况,如果这是唯一需要此逻辑的情况,您还可以考虑为每个应用程序创建不同的入口点。如果这是SOAP,并且用户当前正在调用/ kimbertService /,则可以考虑拥有多个SOAP Input节点,并使用以下路由:/ kimbertService / App1,/ kimbertService / App2,/ kimbertService / App3,然后您将确保App1永远不会阻止App2 ...

答案 1 :(得分:1)

IIB具有通过限制每秒通过给定消息流处理的消息数来进行节流的功能。

例如,要为应用程序中包含的消息流设置maximumRateMsgsPerSec属性,可以使用以下示例代码:

mqsiapplybaroverride –b BARfile -k applicationName -m sampleFlow#maximumRateMsgsPerSec=100

您还可以使用IIB Web用户界面通过工作负载管理策略来做到这一点。

下面是链接: https://www.ibm.com/support/knowledgecenter/en/SSMKHH_9.0.0/com.ibm.etools.mft.doc/bj58270_.htm

一个可行的解决方案

就像其他人提到的那样,理想的解决方案是在IIB前面安装一个API管理网关来管理您的API。

现在,可以采用以下解决方法:

1)复制您的主要服务流,使它们成为两个不同的消息流。这两个是您的后端流,它们执行相同的操作,但是在其中一个上,您可以启用限制。

2)建立一个新的路由器IIB流程,该流程接收来自使用者的HTTP请求。该流标识请求者,并将其相应地路由到后端流。

希望这会有所帮助。

答案 2 :(得分:0)

您可以使用IIB的标准功能手动实现它,但是速率限制是一种API管理功能,最好使用IBM API Connect的现成功能来实现。顺便说一句,它与IIB配合良好。