跳转到内容
技术文章
作者资料照片Bha万博新体育手机客户端lchandra Wadekar

智能代理

Previous -消息存储|指数|下一步——测试消息

本周,我们将探索另一种系统管理模式智能代理

什么时候使用这个模式?

类时使用智能代理请求-应答场景。特别是当返回地址模式被应用。智能代理接收请求并更改返回地址这样它就可以监控响应。当响应到达时,Smart Proxy将响应发送回原始响应返回地址一旦监控步骤完成。

CPI中的智能代理

不幸的是,我无法在CPI中实现该模式。这就是我所尝试的。

实施总结

智能代理的实现使用来自的示例返回地址博客。不过,本博客将使用SAP企业消息传递,而不是Microsoft Azure服务总线。

这个场景返回地址博客如下。客户数据从发送器系统发送。但是,发送方系统希望在单独的队列中获得响应。因此,发送器系统设置JMSReplyTo标头。客户数据处理器将响应放入JMSReplyTo报头指定的队列中。最后,发送方可以处理响应。

在智能代理中,我们将拦截第一步,即请求消息被发送到智能代理,而不是直接发送到队列。智能代理将JMSReplyTo头存储在数据存储中,JMSCorrelationId作为条目Id,并用它自己的地址覆盖JMSReplyTo。作为响应,智能代理将使用JMSCorrelationId获取原始消息,并将消息放入JMSReplyTo报头指定的原始队列中。

1.使客户排队

入队% 20的客户

使客户排队

属性立即开始此流定时器启动事件.准备输入消息内容修改器设置主体。设置JMS报头内容修改器设置JMSCorrelationId, JMSDestination和JMSReplyTo报头。ProcessDirect接收器适配器将调用智能代理流。

设置JMS头内容修饰符的配置

Headers选项卡有这些条目。

行动 名字 类型 数据类型 价值 默认的
创建 JMSCorrelationId XPath 字符串 /客户/ Id
创建 JMSDestination 常数 队列:客户
创建 JMSReplyTo 常数 队列:CustomerResponses

2.智能代理-处理请求消息

处理% 20 % 20请求% 20的消息

处理请求消息

类型接收请求消息ProcessDirect发送器适配器.将其放在数据存储中,条目Id为JMSCorrelationId数据存储写操作.接下来,设置JMS报头内容修改器将覆盖JMSReplyTo头与“队列:SmartProxy”.的AMQP接收器适配器将消息放入JMSDestination头指定的队列中。

JMSCorrelationId、JMSDestination和JMSReplyTo头列在Runtime Configuration选项卡下的Allowed Header中。

数据存储写操作配置

财产 价值
数据存储名称 SmartProxy
可见性 集成流
条目ID ${头。JMSCorrelationId}
告警保留阈值(d) 2
有效期(d) 90
加密存储的消息 无节制的
覆盖现有消息 无节制的
包含消息头 检查

设置JMS头内容修饰符的配置

行动 名字 类型 数据类型 价值 默认的
创建 JMSReplyTo 常数 队列:SmartProxy

AMQP接收器适配器的配置

选项卡 财产 价值
连接 宿主 enterprise-messaging-messaging-gateway.cfapps.eu10.hana.ondemand.com
连接 港口 443
连接 路径 /协议/ amqp10ws
连接 代理类型 互联网
连接 TLS连接 检查
连接 身份验证 OAuth2客户端凭证
连接 凭据名称 企业消息传递
处理 目的地类型 队列
处理 目的地名称 ${头。JMSDestination}
处理 有效期(单位:秒)
处理 交付 持续的
处理 消息类型 自动

3.处理客户

处理% 20 % 20的客户

处理客户

此流接收使用的客户数据AMQP发送器适配器.为简单起见,我们总是将主体设置为Successful payload using内容修改器.最后,AMQP接收器适配器将在JMSReplyTo头指定的队列中对响应进行排队。

标头JMSCorrelationId和JMSReplyTo列在Runtime Configuration选项卡下的Allowed标头中。

AMQP发送器适配器的配置

连接选项卡与“”节中指定的完全相同。2.智能代理-处理请求消息".“Processing”页签的配置如下:

选项卡 财产 价值
处理 队列名称 队列:客户
处理 并发进程数 1
处理 Max。预取消息数 5
处理 Max。重试次数 0
处理 Max后的交付状态重试 拒绝了

AMQP接收器适配器的配置

配置与“”节中指定的完全相同。2.智能代理-处理请求消息"除了目的名称。“目的名称”设置为${头。JMSDestination}

选项卡 财产 价值
处理 目的地名称 ${头。JMSDestination}

4.智能代理——处理响应消息

处理% 20 % 20响应% 20的消息

处理响应消息

类中的消息SmartProxy队列使用AMQP发送器适配器.对象将消息体备份到交换属性内容修改器数据存储获取操作用于恢复原始JMSReplyTo报头的值。接下来,使用另一个Content Modifier恢复主体。最后,AMQP接收器适配器将响应消息放入JMSReplyTo报头指定的队列中。

标头JMSCorrelationId和JMSReplyTo列在Runtime Configuration选项卡下的Allowed标头中。

AMQP发送器适配器的配置

该配置与第3节中指定的配置完全相同。处理除队列名之外的客户。“队列名称”设置为队列:SmartProxy

选项卡 财产 价值
处理 队列名称 队列:SmartProxy

配置数据存储获取操作

财产 价值
数据存储名称 SmartProxy
可见性 集成流
条目ID ${头。JMSCorrelationId}
完成后删除 检查
在缺少条目时抛出异常 无节制的

AMQP接收器适配器的配置

配置与“”节中指定的完全相同。2.智能代理-处理请求消息"除了目的名称。“目的名称”设置为${头。JMSReplyTo}

选项卡 财产 价值
处理 目的地名称 ${头。JMSReplyTo}

5.处理客户响应

处理% 20客户% 20 respose % 20

处理客户响应

此流只是使用的响应AMQP发送器适配器并使用著名的日志记录有效载荷Groovy脚本

AMQP发送器适配器的配置

该配置与第3节中指定的配置完全相同。处理除队列名之外的客户。“队列名称”设置为队列:CustomerResponses

选项卡 财产 价值
处理 队列名称 队列:CustomerResponses

问题和选择

问题发生在第3步。SAP企业消息传递不返回JMSCorrelationId报头。因此,步骤4没有接收到JMSCorrelationId,并且无法恢复JMSReplyTo报头。

替代方案1:使用标准JMS

标准JMS不支持JMS接收器适配器中的动态队列名称。因此,第2步无法实现。反过来,智能代理不能用标准JMS实现。

备选方案2:测试AMQP适配器支持的其他提供者

也许,智能代理可以与AMQP适配器支持的其他提供商一起实现,如Microsoft Azure Service Bus, Solace PubSub+, Apache Qpid Broker-J, Apache ActiveMQ 5和ActiveMQ Artemis, IBM MQ, RabbitMQ。

如果你知道如何解决这个问题,或者如果你知道任何替代方案是否有效,请在下面评论:)。

EIPinCPI评级

不幸的是,我无法实现智能代理模式。所以,我必须给这种模式打0分(满分10分)。

结论

智能代理用于监控消息时返回地址使用模式。

引用/进一步阅读

希望这能有所帮助,
巴拉

Previous -消息存储|指数|下一步——测试消息

指定的标签

      第一个留下评论
      你一定是登录评论:评论或回复一篇文章