2017-06-30 5 views
1

イムシンクコレクション型= LISTのような他のすべてのコレクション型のマップ春XDのRedisのはRedisのを実装しようとしているコレクション型MAPで

stream create tTEST_GF_SINK --definition "trigger --initialDelay=0 --fixedDelay=1 --timeUnit=MINUTES --payload= 'new Date().toString()' --outputType=application/json | 
    transform --expression='new java.util.Date().toString()'| 
    redis --collectionType=MAP --key=1" --deploy 

に固有でシンク、SET、ZSETストリームは、これらの中に書き込むことができますredisがシンクしますが、MAPをコレクション型として使用すると、redis_mapkeyで次のエラーが発生します。

2017-06-30T16:47:59から0400 1.3.1.RELEASE ERRORタスクスケジューラ-3 handler.LoggingHandler - org.springframework.messaging.MessageHandlingException:Redisのコレクション内のメッセージデータの保存に失敗しました。 ネストされた例外はorg.springframework.expression.spel.SpelEvaluationExceptionです:EL1008E:(pos 8): 'org.springframework.messaging.MessageHeaders'のオブジェクトのプロパティまたはフィールド 'redis_mapKey'が見つかりませんでした。 org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)でorg.springframework.integration.redis.outbound.RedisStoreWritingMessageHandler.handleMessageInternal(RedisStoreWritingMessageHandler.java:278) で org.springframework.integrationでorg.springframework.integration.dispatcher.UnicastingDispatcher.dispatchでorg.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:147) で.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) (UnicastingDispatcher.java :120) at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) at org.springframework.integration.ch org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.javaでorg.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:392) でannel.AbstractMessageChannel.send(AbstractMessageChannel.java:442) : 115)org.springframework.integrationでorg.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105でorg.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) で) 。 org.springfrでhandler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:231)org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:154)で org.springframework.integration.handler.AbstractMessageHandler.handleMessageでamework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:102)org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:105)で ( AbstractMessageHandler.java:127)ORGでorg.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:147) でorg.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) で。スプリングフレームワークインテグレーション。ディスパッチャー。 (AbstractMessageChannel.java:77) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:442) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:392) at org。 (エンティティ)。 AbstractMessageSendingTemplate。ジャワ:org.springframeworkでorg.springframework.integration.handler.AbstractMessageProducingHandler.produceOutputでorg.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:231) (AbstractMessageProducingHandler.java:154) における105) 。 integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:102)org.springframework.integration.handler.AbstractMessageHandler.handleMessageでorg.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:105) で (AbstractMessageHandler。 java:127) at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)(UnicastingDispatcher.java:147) at org.springframework.integration.dispatcher.UnicastingDispatcher.ispatchcher org.springframework.integration.channel.AbstractMessageChannel.sendでorg.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:442) でAbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) (AbstractMessageChannel.java:392) org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45)でorg.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) でorg.springfrでorg.springframework.integration.handler.AbstractMessageProducingHandler.produceOutputでorg.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:231) でamework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) ( AbstractMessageProducingHandler.java:154)org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:102)ORGでorg.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:105) で で。 springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) at org.springframework.integration.dispatcher.Abstra org.springframework.integration.dispatcher.UnicastingDispatcher.ispatch(UnicastingDispatcher.java:120) org.springframework.integration.channel.AbstractMessageChannel.sendでorg.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) (AbstractMessageChannel.java:442)org.springframework.integration.channelで で。 AbstractMessageChannel.send(AbstractMessageChannel.java:392) at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) at org.springframework.messaging.core.GenericMessagingTemplate org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputでorg.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) (AbstractMessageProducingHandler.java:231)で.doSend(GenericMessagingTemplate.java:45) org.springframework.integration.handler.AbstractReplyProducingMessageHandlerでorg.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputsでorg.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:154) (AbstractMessageProducingHandler.java:102) で.handleMessageInternal(AbstractReplyProducingMessageHandler.java:105) at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler。ジャワ:127)org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatchで org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) (UnicastingDispatcher.java:147) でorg.springframeworkました。 integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:120)org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77)で org.springframework.integration.channel.AbstractMessageChannel.sendで (要約メッセージ・チャネル。 Javaの:442) org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:392)org.springframework.messaging.core.GenericMessagingTemplate.doSendで (GenericMessagingTemplate.java:115)でorg.springframework.messaging.core.AbstractMessageSendingTemplate.sendでorg.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) (AbstractMessageSendingTemplate.java:105)org.springframework.integration.handlerで で。 org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputsでorg.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:154) でAbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:231) (AbstractMessageProducingHandler.java:102) org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:105) でorg.springでorg.springframework.integration.dispatcher.UnicastingDispatcher.doDispatchでorg.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) でframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) ( UnicastingDispatcher.java:147)ORGでorg.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) でorg.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:120) で。 org.springfrでspringframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:442)org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:392)で org.springframework.messaging.core.AbstractMessageSendingTemplate.sendでorg.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) でamework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) ( AbstractMessageSendingTemplate.java:105)ORGでorg.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:251) でorg.springframework.integration.endpoint.SourcePollingChannelAdapter.handleMessage(SourcePollingChannelAdapter.java:161) で。組織でspringframework.integration.endpoint.AbstractPollingEndpoint.access $ 000(AbstractPollingEndpoint.java:57) org.springframework.integration.endpoint.AbstractPollingEndpoint $ 1.call(AbstractPollingEndpoint.java:176)で org.springframework.integration.endpoint.AbstractPollingEndpoint $ボラード$ 1.runで.springframework.integration.endpoint.AbstractPollingEndpoint $ 1.call(AbstractPollingEndpoint.java:173) (AbstractPollingEndpoint.java:330)org.springframework.integration.utilで :org.springframework.integration.util.ErrorHandlingTaskExecutor.executeでorg.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) (ErrorHandlingTaskExecutor.javaで.ErrorHandlingTaskExecutor $ 1.run(ErrorHandlingTaskExecutor.java:55) 51) org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.runでorg.springframework.integration.endpoint.AbstractPollingEndpoint $ Poller.run(AbstractPollingEndpoint.java:324) (DelegatingErrorHandlingRunnable.java:54) の組織で。(RunTable.java:511) のjava.util.concurrent.FutureTask.run(FutureTask。 Javaの:266) java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.accessで$ 201(ScheduledThreadPoolExecutor.java:180) いるjava.utilでjava.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) で.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745) 原因:org.springframework.expression.spel.SpelEvaluationExcept ion:EL1008E:(pos 8): 'org.springframework.messaging.MessageHeaders'タイプのオブジェクトでプロパティまたはフィールド 'redis_mapKey'が見つかりませんでした。 org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternalでorg.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224) (PropertyOrFieldReference.java:94)org.springframeworkで で。 org.springframework.expression.spelでorg.springframework.expression.spel.ast.PropertyOrFieldReference $ AccessorLValue.getValue(PropertyOrFieldReference.java:374) でexpression.spel.ast.PropertyOrFieldReference.access $ 000(PropertyOrFieldReference.java:46) .ast.CompoundExpression.getValueInternal(CompoundExpression.java:88) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:120) at org.springframework.expression.spel.standard.SpelExpression.getValue (SpelExpression.java:267)01 org.springframework.integration.redis.outbound.RedisStoreWritingMessageHandler.writeToMapでorg.springframework.integration.redis.outbound.RedisStoreWritingMessageHandler.determineMapKey(RedisStoreWritingMessageHandler.java:415) (RedisStoreWritingMessageHandler.java:379)org.springframeworkで で。 integration.redis.outbound.RedisStoreWritingMessageHandler.handleMessageInternal(RedisStoreWritingMessageHandler.java:271)より ... 99

いずれかが関与する2つのキーがあり、MAPのコレクションで

答えて

0

を私を助けることができます。マップが格納されているキーとその要素がマップに格納されているキー。

XDモジュールはmapKeyをプロパティとして公開しません。ヘッダーエンリージャーをアップストリームに追加してredis_mapKeyヘッダーを設定するか、またはモジュールの構成を編集してmap-key-expressionを追加することができます。そうのようなxd/modules/sink/redis/config/redis.xmlを編集例えば

、...

<beans:beans profile="use-store-expression"> 
    <redis:store-outbound-channel-adapter 
     map-key-expression="payload.substring(17)" 
     key-expression="${keyExpression}" collection-type="${collectionType}" 
     channel="input" connection-factory="redisConnectionFactory" /> 
</beans:beans> 

...において...

127.0.0.1:6379> hgetall "foo" 
1) "52" 
2) "2017-07-01 08:43:52" 
3) "53" 
4) "2017-07-01 08:43:53" 
5) "54" 
6) "2017-07-01 08:43:54" 
7) "55" 
8) "2017-07-01 08:43:55" 
... 
0

@Gary

xd:>stream create foo --definition "time | redis --collectionType=MAP --key='foo'" --deploy 

結果。 redis_mapkeyを追加するためにヘッダーが豊富になることをお勧めしました。そのうまく動作します。

ストリームはtTEST_GF_SINK --definition「トリガー--initialDelay = 0 --fixedDelay = 1 --timeUnit = MINUTES --payload = '新しいDate()。のtoString()' --outputType =アプリケーション/ JSONを作成します| ヘッダーエンリッチャー--headers = {\ "redis_mapKey \":\ "payload.substring(17)\"} | transform --expression = 'new java.util.Date()。toString() '| Redisの--collectionType = MAP --key = 1" --deploy

127.0.0.1:6379> hgetall 1

1) "NG()"

2)「土7月1日23:29:16 EDT2017 "

関連する問題