Компонент Camel HazelCast выдает исключение HazelcastSerializationException

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

<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. Любая помощь будет высоко оценена


person remo    schedule 11.12.2013    source источник


Ответы (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.

person pveentjer    schedule 11.12.2013
comment
Привет, Pveentjer. Я использую компонент Camel: HazelCast для маршрутизации HTTP-запроса в hazelcast. HazelcastProducer пытается добавить тело запроса в hazelcastmap, которое он делает как InputStreamCache. - person remo; 11.12.2013
comment
Я не знаком с Camel, поэтому, возможно, лучше попросить кого-нибудь помочь вам. - person pveentjer; 11.12.2013
comment
Привет, pveentjer, добавление пользовательского сериализатора сработало, спасибо за вашу помощь, но думаю, что компонент camel hazelcast должен был справиться с этим. - person remo; 12.12.2013
comment
Спасибо за обновления. Возможно, вы можете сообщить команде Camel, чтобы проблема была решена? - person pveentjer; 12.12.2013