私のプロジェクトでは、スプリング統合を使用してキューを実装しています。ヘッダー・バリュー・ルータの設定は以下のようにXMLである:SpringインテグレーションでjmsまたはactivemqのHeaderValueRouterおよびHeaderEnricherを呼び出す方法
<header-value-router input-channel="jmsUVMasterMessageChannel"
header-name="METADATA_TYPE" default-output-channel="nullChannel"
resolution-required="false">
<mapping value="ASSEMBLY" channel="downloadImageToS3Channel" />
<mapping value="THIRDPARTY" channel="invokeUVMasterAPIChannel" />
</header-value-router>
<header-enricher input-channel="JuiceVendorMessageChannel"
output-channel="JuiceHeaderEnricherChannel">
<header name="sourceName" value="JUICE" />
</header-enricher>
そしてここでは、ゲートウェイの設定です:
私は、Javaコードでこの設定を実装する方法を知りたいですか?私はGoogleで検索し、次のコードが見つかりました:
@Bean
public HeaderValueRouter headerRouter(String gatewayPrefix) {
HeaderValueRouter router = new HeaderValueRouter("METADATA_TYPE");
router.setChannelMapping("ASSEMBLY", "downloadImageToS3Channel");
router.setChannelMapping("THIRDPARTY", "invokeUVMasterAPIChannel");
router.setDefaultOutputChannel(new NullChannel());
router.setResolutionRequired(false);
return router;
}
@Bean
@Transformer(inputChannel="sdiVenderMessageChannel", outputChannel="sdiHeaderEnricherChannel")
public HeaderEnricher enrichHeaders() {
Map<String, HeaderValueMessageProcessor<?>> headersToAdd = new HashMap<String, HeaderValueMessageProcessor<?>>();
// TODO
//headersToAdd.put("sourceName",new StaticHeaderValueMessageProcessor<String>("SDI"));
headersToAdd.put("sourceName", null);
HeaderEnricher enricher = new HeaderEnricher(headersToAdd);
if(logger.isDebugEnabled()){
logger.debug("HeaderEnricher bean initial!");
}
return enricher;
}
しかし、ここでは、私の質問は以下のとおりです。
1)Javaの設定で「入力チャンネル」を設定へどのように?
2)どこでこの関数を呼び出す必要がありますか?アプリケーションを起動すると、この関数にコードが実行されません。私はheaderValueRouterがメッセージを入力チャネルから出力チャネルにディスパッチするのに使われていることを知っていますが、私はこのルータを呼び出すことができる正確な場所は何ですか? ConnectionFactoryまたはListenerContainerでここ
そして、私が定義されたゲートウェイです:
public void registerDynamicInboundGateway(DefaultListableBeanFactory beanFactory) {
this.beanFactory = beanFactory;
BeanDefinitionBuilder builder = BeanDefinitionBuilder
.genericBeanDefinition("org.springframework.integration.jms.JmsMessageDrivenEndpoint");
String jndiFactoryName = this.registerJndiObjectFactoryBean(gatewayPrefix, jmsQueueValue);
this.destination = jndiFactoryName;
String containerBeanName = this.registerMessageListenerContainer();
String listenerBeanName = this.registerMessageListener();
builder.addConstructorArgReference(containerBeanName);
builder.addConstructorArgReference(listenerBeanName);
setValueIfAttributeDefined(builder, autoStartup, "auto-startup");
String beanName = null;
if(gatewayPrefix.equals(HCC_GATEWAY_PREFIX)){
beanName = gatewayPrefix + DynamicInboundGateway.HCC_GATEWAY_SUFIX;
} else if (gatewayPrefix.equals(UVMASTER_GATEWAY_PREFIX)) {
beanName = gatewayPrefix + DynamicInboundGateway.UVMASTER_GATEWAY_PREFIX;
} else {
beanName = gatewayPrefix + DynamicInboundGateway.GATEWAY_SUFIX;
}
this.beanFactory.registerBeanDefinition(
beanName, builder.getBeanDefinition());
}
私は混乱して感じたし、このための任意のサンプルコードが見つかりませんでした。 ありがとう!
私は以下のように、ばねの統合ウェブサイトのサンプルコードに応じHeaderEnricherを定義します。
@Bean
@Transformer(inputChannel="sdiVenderMessageChannel", outputChannel="sdiHeaderEnricherChannel")
public HeaderEnricher enrichHeaders() {
Map<String, HeaderValueMessageProcessor<?>> headersToAdd = new HashMap<String, HeaderValueMessageProcessor<?>>();
// TODO
headersToAdd.put("sourceName",new StaticHeaderValueMessageProcessor<String>("SDI"));
//headersToAdd.put("sourceName", null);
HeaderEnricher enricher = new HeaderEnricher(headersToAdd);
if(logger.isDebugEnabled()){
logger.debug("HeaderEnricher bean initial!");
}
return enricher;
}
そして、これは、いくつかのエラーが発生しました:
StaticHeaderValueMessageProcessor cannot be resolved to a type
しかし、私はすべてインポートしました必要なパッケージはmavenと一緒に必要です。なぜ私は理解できません。
どうもありがとう!それは本当に物事をはっきりとさせる。しかしもう1つの質問ですが、私がHeaderEnricherを定義したときに私の質問が更新されました。これに気をつけてください。再度、感謝します。 – nasuf
あなたのBeanを問題なくテストケース(編集を参照)に追加しました。もちろん、Spring Integration 3.0以降で利用可能だった 'import org.springframework.integration.transformer.support.StaticHeaderValueMessageProcessor; 'が必要です。 –
ありがとうございました。私はXMLでそれを設定し、それは働いた – nasuf