Компонент Camel HazelCast, выбрасывающий исключение HazelcastSerializationException

У меня есть следующий маршрут на верблюде:

<route>
  <from uri="servlet:///user?matchOnUriPrefix=true"/>
   <setHeader headerName="cachename">
    <simple>${header.CamelHttpPath.split("/")[1]}</simple>
</setHeader>
<setHeader headerName="key1">
    <simple>${header.CamelHttpPath.split("/")[2]}</simple>
</setHeader>
  <to uri="direct:put"/>

</route>




<route>
    <from uri="direct:put" />
        <!-- If using version 2.8 and above set headerName to "CamelHazelcastOperationType" -->
    <setHeader headerName="CamelHazelcastOperationType">
        <constant>put</constant>
    </setHeader>
    <setHeader headerName="CamelHazelcastObjectId">
        <simple>${header.key1}</simple>
    </setHeader>
    <process ref="requestTimeProc"/>
    <to uri="hazelcast:map:default" />
</route>

И я пытаюсь поместить строку в качестве значения в кэш.

Моя конфигурация HazelCast:

<map name="default">

        <in-memory-format>OBJECT</in-memory-format>


        <backup-count>1</backup-count>

        <async-backup-count>0</async-backup-count>

        <time-to-live-seconds>0</time-to-live-seconds>

        <max-idle-seconds>0</max-idle-seconds>

        <eviction-policy>NONE</eviction-policy>

        <max-size policy="PER_NODE">0</max-size>

        <eviction-percentage>25</eviction-percentage>

        <merge-policy>com.hazelcast.map.merge.PassThroughMergePolicy</merge-policy>

    </map>
<serialization>
        <portable-version>0</portable-version>
    </serialization>

И я получаю следующее исключение:

2013-12-10 22:47:08,288 [tp-1763826860-0] ERROR DefaultErrorHandler            - Failed delivery for (MessageId: ID-DJD7W4R1-54721-1386740808850-0-1 on ExchangeId: ID-DJD7W4R1-54721-1386740808850-0-2). Exhausted after delivery attempt: 1 caught: com.hazelcast.nio.serialization.HazelcastSerializationException: There is no suitable serializer for class org.apache.camel.converter.stream.InputStreamCache
com.hazelcast.nio.serialization.HazelcastSerializationException: There is no suitable serializer for class org.apache.camel.converter.stream.InputStreamCache
    at com.hazelcast.nio.serialization.SerializationServiceImpl.toData(SerializationServiceImpl.java:172)[hazelcast-3.1.2.jar:3.1.2]
    at com.hazelcast.nio.serialization.SerializationServiceImpl.toData(SerializationServiceImpl.java:157)[hazelcast-3.1.2.jar:3.1.2]
    at com.hazelcast.map.MapService.toData(MapService.java:666)[hazelcast-3.1.2.jar:3.1.2]
    at com.hazelcast.map.proxy.MapProxyImpl.put(MapProxyImpl.java:72)[hazelcast-3.1.2.jar:3.1.2]
    at com.hazelcast.map.proxy.MapProxyImpl.put(MapProxyImpl.java:60)[hazelcast-3.1.2.jar:3.1.2]
    at org.apache.camel.component.hazelcast.map.HazelcastMapProducer.put(HazelcastMapProducer.java:136)[camel-hazelcast-2.11.2.jar:2.11.2]
    at org.apache.camel.component.hazelcast.map.HazelcastMapProducer.process(HazelcastMapProducer.java:71)[camel-hazelcast-2.11.2.jar:2.11.2]
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)[camel-core-2.11.2.jar:2.11.2]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.11.2.jar:2.11.2]
    at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122)[camel-core-2.11.2.jar:2.11.2]

Пожалуйста, дайте мне знать, если я пропускаю что-либо в конфигурации. Я использую конфигурацию Hazelcast по умолчанию, предоставленную в банке Hazelcast. Любая помощь будет высоко оценена

1 ответ

Решение

Несколько комментариев:

Я бы не стал менять карту "по умолчанию". Это означает, что любая карта в системе, которая не имеет явной конфигурации, теперь будет использовать эту конфигурацию. Так что выясните, какая карта используется, и настройте ее явно.

 <map name="explicitName">
    <in-memory-format>OBJECT</in-memory-format>
    ....
</map>

Об исключении:

com.hazelcast.nio.serialization.HazelcastSerializationException: нет подходящего сериализатора для класса org.apache.camel.converter.stream.InputStreamCache

Это означает, что InputStreamCache помещен в карту, но Hazelcast не знает, как преобразовать его в поток байтов. Вы можете подключить сериализатор для этого класса, см. Следующий пост в блоге, как это сделать:

http://blog.hazelcast.com/blog/2013/10/16/kryo-serializer/

Большой вопрос для меня: почему вы пытаетесь поместить InputStreamCache в карту? Мое инстинктивное чувство говорит, что этот класс вовсе не то, что вы хотите поместить в распространяемую карту Hazelcast.

Другие вопросы по тегам