0

假设我有这样的路线。

        <route>
            <from uri="activemq:queue:someQueue"/>
            <to uri="mybatis:select-items?statementType=SelectOne"/>
        </route>

如何从activemq获取messaeg并将其传递给mybatis select?(这只是一个字符串)

@编辑。

我想得到这样的字符串:category1, category2

我的选择看起来像:

<select id="select-authors" resultMap="authors-result">
                SELECT
                 name, age, category
                FROM author
                WHERE category IN
                <foreach item="item" index="index" collection="categories"
                 open="(" separator="," close=")">
                    #{item}
                 </foreach>
     </select>

结果映射只是映射这 3 个字段。

4

2 回答 2

0

因此,如果您有来自 activemq 消费者的“category1,category2”之类的字符串,则需要从中收集以进行 mybatis foreach 处理。我使用 java dsl 做例子,因为它会更快。

from("activemq:queue:someQueue")
            .process(exchange -> {
                String jmsString = exchange.getIn().getBody(String.class);
                List<String> strings = Arrays.asList(jmsString.split(","));
                exchange.getIn().setBody(strings);
            })
            .to("mybatis:select-items?statementType=SelectOne");

并更改映射,例如:

<select id="select-authors" parameterType="java.util.List" resultMap="authors-result">
            SELECT
             name, age, category
            FROM author
            WHERE category IN
            <foreach item="item" collection="list"
             open="(" separator="," close=")">
                #{item}
             </foreach>
 </select>

这应该有效。您可以在此处找到更多有用的示例

于 2018-09-12T10:19:53.813 回答
-1

您可以使用 Camel 简单语言 ( http://camel.apache.org/simple.html ) 访问 JMS 消息的内容(正文或属性):

<route>
   <from uri="activemq:queue:someQueue"/>
   <to uri="mybatis:select-items?statementType=${body}"/>
</route>
于 2018-09-12T08:13:45.560 回答