Mulesoft Dataweave,LDAP 到 SOAP 大消息截断在特定大小。尺寸限制?
Mulesoft Dataweave, LDAP to SOAP large message truncating at certain size. Size limit?
(问题在最后)
所以我的 Mule "Transform Message" 组件的任务是从 LDAP 目录服务中获取大量用户信息,并使用 SOAP 将其提供给旧的数据库端点。相当简单的转换内容。
主要!关于此操作的是必须提供给端点的消息的大小。必须在单个消息中提供整个有效负载,否则服务将删除所有不属于有效负载的条目(没有明确的 'delete' 服务)。这是一个问题,因为目录中的用户数量大约为 20,000,导致每条消息的大小为 5MB 左右。
我在 Mule Studio 中的流程目前适用于从 LDAP 组件return编辑的少量用户。从端点成功 return,我可以看到旧环境中更新的数据。当将其应用于更多 'production-realistic' 负载时,Web 服务消费者 (SOAP) 会出现奇怪的异常(意外 EOF/character)。
所以我在中间插入了一个文件组件来转储检查发送给消费者的消息。消息确实在完成之前就被切断了,这就是 EOF 的来源。
这是 Dataweave 中的转换脚本。
%output application/xml
%namespace ns0 test.namespace.com
---
{
ns0#updateContact: {
ns0#ContactType: "Primary",
ns0#ContactDetails: {
(payload map {
(ns0#ContactDetailElem: {
ns0#personID: $.personID,
ns0#contactDetail: $.desc
}) when $.personID != null
})
}
}
}
预期输出低于预期输出,并且使用较小的负载成功发生。
<?xml version='1.0' encoding='windows-1252'?>
<ns0:updateContact xmlns:ns0="test.namespace.com">
<ns0:ContactType>Primary</ns0:ContactType>
<ns0:ContactDetails>
<../>
<ns0:ContactDetailElem>
<ns0:personID>{Integer}</ns0:personID>
<ns0:contactDetail>{String.detail}</ns0:contactDetail>
</ns0:ContactDetailElem>
<../>
</ns0:ContactDetails>
</ns0:updateContact>
在大有效负载上,文件末尾发生以下情况
<?xml version='1.0' encoding='windows-1252'?>
<ns0:updateContact xmlns:ns0="test.namespace.com">
<ns0:ContactType>Primary</ns0:ContactType>
<ns0:ContactDetails>
<../>
<ns0:ContactDetailElem>
<ns0:personID>{Integer}</ns0:personID>
<ns0:contactDetail>{String.detail}</ns0:contactDetail>
</ns0:ContactDeta
这看起来像是打字错误,但看起来像是消息在完成之前就被剪掉了。文件大小始终止于 3,553,099 个字符。当然,由于 xml 无效,这会使流程崩溃。
那么问题是 Dataweave 转换器可以创建的消息大小有限制吗?如果不是合法错误而是配置问题,我在哪里可以找到此设置?我环顾四周,但找不到任何人遇到此类问题。
TL;DR:Dataweave 转换消息是否有大约 3.38MB 的大小限制?
异常原因:com.ctc.wstx.exc.WstxEOFException:序言中出现意外的 EOF
PS:输入后我找到了有关 dataweave streaming 的文档,看看这是否对我的情况有帮助。否则我正在考虑实施一种变通方法来在 dataweave 之外构建消息,然后将其传递给消费者。
您使用的是 Mule 3.8.3 版吗?尝试 3.8.4,它修复了 DataWeave 中导致字符串在某些情况下被截断的错误。
我们有一个类似的问题,和你的一样,就是尺寸的问题。我们使用 stax 实现了流式处理。
(问题在最后)
所以我的 Mule "Transform Message" 组件的任务是从 LDAP 目录服务中获取大量用户信息,并使用 SOAP 将其提供给旧的数据库端点。相当简单的转换内容。
主要!关于此操作的是必须提供给端点的消息的大小。必须在单个消息中提供整个有效负载,否则服务将删除所有不属于有效负载的条目(没有明确的 'delete' 服务)。这是一个问题,因为目录中的用户数量大约为 20,000,导致每条消息的大小为 5MB 左右。
我在 Mule Studio 中的流程目前适用于从 LDAP 组件return编辑的少量用户。从端点成功 return,我可以看到旧环境中更新的数据。当将其应用于更多 'production-realistic' 负载时,Web 服务消费者 (SOAP) 会出现奇怪的异常(意外 EOF/character)。
所以我在中间插入了一个文件组件来转储检查发送给消费者的消息。消息确实在完成之前就被切断了,这就是 EOF 的来源。
这是 Dataweave 中的转换脚本。
%output application/xml
%namespace ns0 test.namespace.com
---
{
ns0#updateContact: {
ns0#ContactType: "Primary",
ns0#ContactDetails: {
(payload map {
(ns0#ContactDetailElem: {
ns0#personID: $.personID,
ns0#contactDetail: $.desc
}) when $.personID != null
})
}
}
}
预期输出低于预期输出,并且使用较小的负载成功发生。
<?xml version='1.0' encoding='windows-1252'?>
<ns0:updateContact xmlns:ns0="test.namespace.com">
<ns0:ContactType>Primary</ns0:ContactType>
<ns0:ContactDetails>
<../>
<ns0:ContactDetailElem>
<ns0:personID>{Integer}</ns0:personID>
<ns0:contactDetail>{String.detail}</ns0:contactDetail>
</ns0:ContactDetailElem>
<../>
</ns0:ContactDetails>
</ns0:updateContact>
在大有效负载上,文件末尾发生以下情况
<?xml version='1.0' encoding='windows-1252'?>
<ns0:updateContact xmlns:ns0="test.namespace.com">
<ns0:ContactType>Primary</ns0:ContactType>
<ns0:ContactDetails>
<../>
<ns0:ContactDetailElem>
<ns0:personID>{Integer}</ns0:personID>
<ns0:contactDetail>{String.detail}</ns0:contactDetail>
</ns0:ContactDeta
这看起来像是打字错误,但看起来像是消息在完成之前就被剪掉了。文件大小始终止于 3,553,099 个字符。当然,由于 xml 无效,这会使流程崩溃。
那么问题是 Dataweave 转换器可以创建的消息大小有限制吗?如果不是合法错误而是配置问题,我在哪里可以找到此设置?我环顾四周,但找不到任何人遇到此类问题。
TL;DR:Dataweave 转换消息是否有大约 3.38MB 的大小限制?
异常原因:com.ctc.wstx.exc.WstxEOFException:序言中出现意外的 EOF
PS:输入后我找到了有关 dataweave streaming 的文档,看看这是否对我的情况有帮助。否则我正在考虑实施一种变通方法来在 dataweave 之外构建消息,然后将其传递给消费者。
您使用的是 Mule 3.8.3 版吗?尝试 3.8.4,它修复了 DataWeave 中导致字符串在某些情况下被截断的错误。
我们有一个类似的问题,和你的一样,就是尺寸的问题。我们使用 stax 实现了流式处理。