【问题标题】:How to make Infinispan work with camel如何让 Infinispan 与骆驼一起工作
【发布时间】:2017-04-01 05:58:58
【问题描述】:
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 的错误“cannot connect to foo:11222”或“pool not open”,然后是关于混合 Uber 和 Jars 版本的警告。我开始使用 ehcache 实现起来很痛苦,因为有限的简单示例展示了如何从 rest 调用等中存储、检索和清除缓存。现在,我需要它来工作,以便我可以轻松地将其迁移到 Openshift 但是,仍然行不通!每次我重新启动项目时,都会遇到不同的错误。请任何帮助逐步设置 Infinispan 以使用我的上述代码工作,我们将不胜感激。谢谢大家!

P.S:我已经通读了 Redhat 数据网格入门页面并按照他们的说明进行操作,最后才这样做!!!

【问题讨论】:

    标签: java caching intellij-idea apache-camel infinispan


    【解决方案1】:

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

    【讨论】:

    • 我试过了,还是不行。 :( 我得到了这个 org.infinispan.client.hotrod.RemoteCacheManager start ,它只是将代码处理挂在那里。我的 Infinispan 服务器正在运行,但似乎无法使用 .addServer() 因为它总是标记为红色并且无法找到 maven 依赖项来解决这个问题。
    • 我还不清楚你是想使用嵌入式还是客户端/服务器模式。
    • 我使用的是客户端/服务器模式,但是我选择了与上面的代码不同的路径,因为我想将缓存作为一个单独的进程使用,尽管使用 bean 声明与路由集成.我遇到这个问题的原因是,我使用了比服务器版本更新的客户端版本。
    • 我有一个不同的问题,我需要配置两个可以相互引用的缓存实例,其中一个保存键的引用,另一个保存存储的对象以及两者中通用的键缓存实例来创建该链接,但没有找到任何使用 RemoteCacheManager 或 ConfigurationBuilder 定义两个缓存的示例。
    【解决方案2】:

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

    第一条路线:

    • 您应该使用 InfinispanConstants.VALUE 设置要放入缓存的值

    第二条路线:

    • 您应该使用与第一条路由相同的缓存(即相同的缓存名称)
    • 你应该使用简单的设置 InfinispanConstants.KEY

    【讨论】:

    • 好的,这绝对消除了我在使用哪些常量方面的一些困惑,尽管现在,我已经将它用作 Java 类,这使得管理和工作更加容易与。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2017-06-25
    • 2020-12-13
    相关资源
    最近更新 更多