当前位置: 首页 > 知识库问答 >
问题:

如何使Infinispan与camel一起工作

益承颜
2023-03-14
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.infinispan.InfinispanConstants;
import org.apache.camel.component.jackson.JacksonDataFormat;
import org.apache.camel.model.dataformat.JsonLibrary;
import uk.co.sammy.model.Collection;

public class InfinispanRoute extends RouteBuilder {

    private JacksonDataFormat json = new JacksonDataFormat(Collection.class);

    @Override
    public void configure() throws Exception {
        from("file:src/data?noop=true&include=.*.json")
                .choice()
                .when()
                .jsonpath("$..CustInfo[?(@.firstName == 'Sammy')]").unmarshal(json)
                .log("Got customer data for ${body.custInfo.firstName}")
                .setHeader(InfinispanConstants.OPERATION, constant(InfinispanConstants.PUT_IF_ABSENT))
                .setHeader(InfinispanConstants.KEY, simple("${body.custInfo.firstName}"))
                .to("infinispan://localhost")
                .marshal().json(JsonLibrary.Jackson)
                .to("activemq:queue:incomingApplication", "activemq:queue:customerDetails");

        from("activemq:queue:incomingApplication")
                .setHeader(InfinispanConstants.OPERATION, constant(InfinispanConstants.GET))
                .setHeader(InfinispanConstants.KEY, constant("${body.custInfo.firstName}"))
                .to("infinispan://foo?cacheName=localCache")
                .setBody(simple("${header.CamelInfinispanOperationResult}"))
                .to("activemq:output");
    }
}

我的pom。xml如下所示

<properties>
        <activemq.version>5.14.1</activemq.version>
        <camel.version>2.18.0</camel.version>
        <infinispan.version>8.3.0.Final-redhat-1</infinispan.version>
        <camel-jbossdatagrid.version>6.6.1.Final-redhat-1</camel-jbossdatagrid.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jackson</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jsonpath</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-embedded</artifactId>
            <version>${infinispan.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jbossdatagrid</artifactId>
            <version>${camel-jbossdatagrid.version}</version>
        </dependency>

        <!--ActiveMQ -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-camel</artifactId>
            <version>${activemq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>${activemq.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-all</artifactId>
            <version>5.1</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>fuse-release</id>
            <name>jboss Release Repository</name>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>
</project>

我已经尝试了三天,使用REdhat入门指南让这个简单的示例代码与Infinispan一起使用,并下载了快速入门zip来运行它,但仍然不起作用!我一直收到Spring JMS的错误“无法连接到foo: 11222”或“池未打开”,然后是关于混合Uber和Jars版本的警告。我开始使用ehcache,这很难实现,因为只有有限的简单示例展示了如何从rest调用等中存储、检索和清除缓存。现在,我需要它才能工作,以便我可以轻松地将其迁移到Openshift,但是,仍然不起作用!每次我重新启动项目,我都会收到不同的错误。请帮助逐步设置Infinispan使用我的上述代码工作,我们将不胜感激。谢谢伙计们!

P、 S:我已经阅读了Redhat data grid getting started(红帽数据网格入门)页面,并按照他们的指示做了最后的选择!!!

共有2个答案

李兴安
2023-03-14

我在您提供的示例中看到了一些错误:

第一条路线:

  • 您应该使用InfinispanCon量设置要放入缓存中的值。值

第二条路线:

  • 您应该使用第一条路由使用的相同缓存(即相同的缓存名称)
欧镜
2023-03-14

使用“i”nfinispan://localhost“uri格式将尝试连接到Infinispan服务器。要使用嵌入式缓存,您应该使用类似“Infinispan://”的内容?cacheName=localCache“

 类似资料:
  • 我最近安装了privacy vpn,结果发现启用的openvpn会破坏Docker。 当我尝试运行时,我得到以下错误 禁用vpn可以解决这个问题(不过,我宁愿不禁用它)。有没有办法使这两者和平共处?我使用debian jessie,我的openvpn有以下版本字符串 null

  • 这不适用于REST DSL。 我正在用这条简单的路由来测试它: REST DSL成功地找到了在web.xml中定义的RestletComponent Bean,但该Bean没有与之关联的camelContext,因此当代码试图访问上下文时,我会得到一个空指针异常。 基本上,我开始怀疑REST DSL与servlet容器中的Restlet不兼容。我希望托管servlet容器处理传入的请求,而不希望为

  • 我是不是漏掉了什么?我很确定编码sshPrivateKey字节[]是一种方法(如果我不这样做,JSCH会抱怨错误的密钥),但我不确定我还缺少什么?

  • 现在,我正在Java EE 7应用程序上使用JMS 2.0和Artemis 1.2.0,我想用Camel做一些集成任务。 目前,在查看驼峰jms文档时,没有提到如何使用通用驼峰jms组件向任何符合jms 2.0的代理生成和使用消息。 组件文档中的唯一示例是使用Spring DSL使用专用的ActiveMQ组件配置ActiveMQ连接工厂。如何配置骆驼JMS的连接以连接到我的Artemis实例? 考

  • 所以我尝试在magnolia中制作一些页面,以便它们在phoneGap中工作,phoneGap是一个包装器,包装HTML5/CSS/JavaScript,并将其部署为移动应用程序。 Magnolia的问题是,它使用诸如jtl或jsp之类的servlet,而as phoneGap只接受这些servlet。html页面,不呈现jtl或jsp页面。 那么,我该如何只制作HTML5页面呢? 如有任何想法/