【问题标题】:Camel sending messages to OracleAQ issuesCamel 向 OracleAQ 发送消息的问题
【发布时间】:2014-03-30 06:56:42
【问题描述】:

我们有一个要求,我们尝试使用 Camel 从 activemq 队列向 oracle aq 队列发送一个巨大的 xml 有效负载。

有效负载超过 4000 字节。因此,Camel 无法发送此消息,因为 Oracleaq 试图将此消息转换为 VARCHAR,该 VARCHAR 限制为 4000 个字符。

那么,我们如何将这些巨大的有效载荷传递给 Oracle。我是否必须在骆驼中设置一些东西,以便将消息作为“CLOB”而不是“VARCHAR”传递给 Oracle?还是甲骨文需要做的事情?

【问题讨论】:

    标签: java oracle jms apache-camel activemq


    【解决方案1】:

    Apache Camel 在 camel-jms 组件中使用 Spring JMS,因此它支持 JMS 可以做的事情。因此,如果 Oracle AMQ 有 4000 字节左右的限制,则需要在 Oracle 端进行处理。

    基本上,Camel 使用 JMS,您需要深入了解 Oracle AMQ 文档以了解其 JMS 互操作性。

    JMS 有不同的消息类型:文本、字节、映射、对象等。对于 XML,您可能需要使用字节或文本。您可以在 Camel 的 JMS 端点上配置 jmsMessageType 以强制使用特定类型。如果不是,那么 Camel 会根据消息正文类型选择最合适的。例如字符串 => 文本等。

    Apache Camel 的其他用户已与 Oracle AMQ 集成,因此应该可以。

    【讨论】:

      【解决方案2】:

      您可以在发送到 Oracle 之前尝试使用 convertBodyTo 方法:

      https://camel.apache.org/convertbodyto.html

      【讨论】:

      • 尝试将其转换为 String、Document 以及该骆驼链接中提到的所有类型。没有工作。不确定我是否可以从骆驼以 clob 格式发送消息。
      • 您是否尝试转换为 java.sql.Clob?
      【解决方案3】:

      如果您使用 Oracle AQ 的“缓冲消息”功能,则大小不能超过 4000 字节,如规范中所述:

      http://docs.oracle.com/cd/E11882_01/server.112/e11013/jm_create.htm#ADQUE2891

      如果您不使用缓冲消息传递,OracleAQ 应该自动处理转换为 VARCHAR2 或 CLOB,据我所知,这取决于消息大小

      【讨论】:

      • 不...我没有使用 Buffred Messaging...这是我试图推送到 Oracle aq 的 4500 字节的 xml
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 2014-12-30
      • 2020-10-11
      • 2016-01-13
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多