2016-11-17 63 views
2
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看起來像下面如何使Infinispan的工作,駱駝

<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> 

我已經嘗試了三天拿到這個簡單的示例代碼的Infinispan使用RedHat的入門指南工作並下載了quickstart zip運行,但仍然無法運行! Spring JMS不斷地收到錯誤「無法連接到foo:11222」或「pool not open」,然後警告有關混合Uber和Jars版本。我開始使用ehcache,由於有限的簡單示例展示瞭如何從休息調用中存儲,檢索和清除緩存等,這是一個很難實現的ehcache。現在,我需要這個工作,以便我可以輕鬆地將它遷移到Openshift,但仍然將無法正常工作!每次我重新啓動項目時,都會遇到不同的錯誤。請任何幫助一步一步安裝Infinispan使用我的上述代碼將受到嚴格的讚賞。多謝你們!

P.S:我已經通讀了Redhat數據網格的入門頁面並按照他們的指示做了這件事,然後作爲我的最後一招!

回答

3

使用「infinispan:// localhost」uri格式將嘗試連接到Infinispan服務器。要使用嵌入式緩存,你應該使用類似「的Infinispan:// cacheName = localCache」

+0

我已經試過了,它仍然無法正常工作。 :(我得到這個_org.infinispan.client.hotrod.RemoteCacheManager start_,它只是掛起了代碼處理過程。我已經運行了Infinispan服務器,但似乎無法使用_.addServer()_,因爲它總是標記紅色和無法找到maven依賴項來解決這個問題 – Sammy65

+0

如果您想使用嵌入式或客戶端/服務器模式,我仍然不清楚 –

+0

我正在使用客戶端/服務器模式,但是,我已經去了與上面的代碼有不同的路由,因爲我希望將緩存作爲單獨的進程使用,儘管與使用bean聲明的路由集成在一起。爲什麼我遇到這個問題是因爲我在服務器版本中使用了更新的客戶端版本。 – Sammy65

1

我看到的例子了一些錯誤您提供:

1路線:

  • 你應該設置的值要放到緩存中InfinispanConstants.VALUE

第二個途徑:

  • 您應該使用第一個路由使用的相同緩存(即,相同的緩存名)
  • 你應該使用簡單的設定InfinispanConstants.KEY
+0

好吧,這絕對清除了我對現在使用哪些常量的一些困惑,我已經放棄了將它用作Java類的途徑,這使得它更易於管理和使用。 – Sammy65