org.springframework.cloud.stream.binder.HeaderMode Java Examples
The following examples show how to use
org.springframework.cloud.stream.binder.HeaderMode.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: KinesisStreamProvisioner.java From spring-cloud-stream-binder-aws-kinesis with Apache License 2.0 | 6 votes |
@Override public ProducerDestination provisionProducerDestination(String name, ExtendedProducerProperties<KinesisProducerProperties> properties) throws ProvisioningException { if (logger.isInfoEnabled()) { logger.info("Using Kinesis stream for outbound: " + name); } if (properties.getHeaderMode() == null) { properties.setHeaderMode(HeaderMode.embeddedHeaders); } return new KinesisProducerDestination(name, createOrUpdate(name, properties.getPartitionCount())); }
Example #2
Source File: KinesisStreamProvisioner.java From spring-cloud-stream-binder-aws-kinesis with Apache License 2.0 | 6 votes |
@Override public ConsumerDestination provisionConsumerDestination(String name, String group, ExtendedConsumerProperties<KinesisConsumerProperties> properties) throws ProvisioningException { if (properties.getExtension().isDynamoDbStreams()) { if (logger.isInfoEnabled()) { logger.info("Using DynamoDB table in DynamoDB Streams support for inbound: " + name); } return new KinesisConsumerDestination(name, Collections.emptyList()); } if (logger.isInfoEnabled()) { logger.info("Using Kinesis stream for inbound: " + name); } if (properties.getHeaderMode() == null) { properties.setHeaderMode(HeaderMode.embeddedHeaders); } int shardCount = properties.getInstanceCount() * properties.getConcurrency(); return new KinesisConsumerDestination(name, createOrUpdate(name, shardCount)); }
Example #3
Source File: KafkaBinderConfigurationProperties.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
public HeaderMode getHeaderMode() { return this.producerProperties.getHeaderMode(); }
Example #4
Source File: KafkaBinderConfigurationProperties.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
public void setHeaderMode(HeaderMode headerMode) { this.producerProperties.setHeaderMode(headerMode); }
Example #5
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
@Test public void testDlqNone() throws Exception { testDlqGuts(false, HeaderMode.none, 1); }
Example #6
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
@Test public void testDlqEmbedded() throws Exception { testDlqGuts(false, HeaderMode.embeddedHeaders, 3); }
Example #7
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
private void testDlqGuts(boolean withRetry, HeaderMode headerMode, Integer dlqPartitions) throws Exception { testDlqGuts(withRetry, headerMode, dlqPartitions, false); }
Example #8
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
@Test @SuppressWarnings("unchecked") public void testPartitionedModuleJavaWithRawMode() throws Exception { Binder binder = getBinder(); ExtendedProducerProperties<KafkaProducerProperties> properties = createProducerProperties(); properties.setHeaderMode(HeaderMode.none); this.applicationContext.registerBean("pkExtractor", RawKafkaPartitionTestSupport.class, () -> new RawKafkaPartitionTestSupport()); this.applicationContext.registerBean("pkSelector", RawKafkaPartitionTestSupport.class, () -> new RawKafkaPartitionTestSupport()); properties.setPartitionKeyExtractorName("pkExtractor"); properties.setPartitionSelectorName("pkSelector"); properties.setPartitionCount(6); DirectChannel output = createBindableChannel("output", createProducerBindingProperties(properties)); output.setBeanName("test.output"); Binding<MessageChannel> outputBinding = binder.bindProducer("partJ.raw.0", output, properties); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); consumerProperties.setConcurrency(2); consumerProperties.setInstanceCount(3); consumerProperties.setInstanceIndex(0); consumerProperties.setPartitioned(true); consumerProperties.setHeaderMode(HeaderMode.none); consumerProperties.getExtension().setAutoRebalanceEnabled(false); QueueChannel input0 = new QueueChannel(); input0.setBeanName("test.input0J"); Binding<MessageChannel> input0Binding = binder.bindConsumer("partJ.raw.0", "test", input0, consumerProperties); consumerProperties.setInstanceIndex(1); QueueChannel input1 = new QueueChannel(); input1.setBeanName("test.input1J"); Binding<MessageChannel> input1Binding = binder.bindConsumer("partJ.raw.0", "test", input1, consumerProperties); consumerProperties.setInstanceIndex(2); QueueChannel input2 = new QueueChannel(); input2.setBeanName("test.input2J"); Binding<MessageChannel> input2Binding = binder.bindConsumer("partJ.raw.0", "test", input2, consumerProperties); output.send(new GenericMessage<>(new byte[] { (byte) 0 })); output.send(new GenericMessage<>(new byte[] { (byte) 1 })); output.send(new GenericMessage<>(new byte[] { (byte) 2 })); Message<?> receive0 = receive(input0); assertThat(receive0).isNotNull(); Message<?> receive1 = receive(input1); assertThat(receive1).isNotNull(); Message<?> receive2 = receive(input2); assertThat(receive2).isNotNull(); assertThat(Arrays.asList(((byte[]) receive0.getPayload())[0], ((byte[]) receive1.getPayload())[0], ((byte[]) receive2.getPayload())[0])) .containsExactlyInAnyOrder((byte) 0, (byte) 1, (byte) 2); input0Binding.unbind(); input1Binding.unbind(); input2Binding.unbind(); outputBinding.unbind(); }
Example #9
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
@Test @SuppressWarnings("unchecked") public void testPartitionedModuleSpELWithRawMode() throws Exception { Binder binder = getBinder(); ExtendedProducerProperties<KafkaProducerProperties> properties = createProducerProperties(); properties.setPartitionKeyExpression( spelExpressionParser.parseExpression("payload[0]")); properties.setPartitionSelectorExpression( spelExpressionParser.parseExpression("hashCode()")); properties.setPartitionCount(6); properties.setHeaderMode(HeaderMode.none); DirectChannel output = createBindableChannel("output", createProducerBindingProperties(properties)); output.setBeanName("test.output"); Binding<MessageChannel> outputBinding = binder.bindProducer("part.raw.0", output, properties); try { Object endpoint = extractEndpoint(outputBinding); assertThat(getEndpointRouting(endpoint)) .contains(getExpectedRoutingBaseDestination("part.raw.0", "test") + "-' + headers['partition']"); } catch (UnsupportedOperationException ignored) { } ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); consumerProperties.setConcurrency(2); consumerProperties.setInstanceIndex(0); consumerProperties.setInstanceCount(3); consumerProperties.setPartitioned(true); consumerProperties.setHeaderMode(HeaderMode.none); consumerProperties.getExtension().setAutoRebalanceEnabled(false); QueueChannel input0 = new QueueChannel(); input0.setBeanName("test.input0S"); Binding<MessageChannel> input0Binding = binder.bindConsumer("part.raw.0", "test", input0, consumerProperties); consumerProperties.setInstanceIndex(1); QueueChannel input1 = new QueueChannel(); input1.setBeanName("test.input1S"); Binding<MessageChannel> input1Binding = binder.bindConsumer("part.raw.0", "test", input1, consumerProperties); consumerProperties.setInstanceIndex(2); QueueChannel input2 = new QueueChannel(); input2.setBeanName("test.input2S"); Binding<MessageChannel> input2Binding = binder.bindConsumer("part.raw.0", "test", input2, consumerProperties); Message<byte[]> message2 = org.springframework.integration.support.MessageBuilder .withPayload(new byte[] { 2 }) .setHeader(IntegrationMessageHeaderAccessor.CORRELATION_ID, "kafkaBinderTestCommonsDelegate") .setHeader(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, 42) .setHeader(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, 43).build(); output.send(message2); output.send(new GenericMessage<>(new byte[] { 1 })); output.send(new GenericMessage<>(new byte[] { 0 })); Message<?> receive0 = receive(input0); assertThat(receive0).isNotNull(); Message<?> receive1 = receive(input1); assertThat(receive1).isNotNull(); Message<?> receive2 = receive(input2); assertThat(receive2).isNotNull(); assertThat(Arrays.asList(((byte[]) receive0.getPayload())[0], ((byte[]) receive1.getPayload())[0], ((byte[]) receive2.getPayload())[0])) .containsExactlyInAnyOrder((byte) 0, (byte) 1, (byte) 2); input0Binding.unbind(); input1Binding.unbind(); input2Binding.unbind(); outputBinding.unbind(); }
Example #10
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 4 votes |
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void testSendAndReceiveWithRawMode() throws Exception { Binder binder = getBinder(); ExtendedProducerProperties<KafkaProducerProperties> producerProperties = createProducerProperties(); producerProperties.setHeaderMode(HeaderMode.none); DirectChannel moduleOutputChannel = createBindableChannel("output", createProducerBindingProperties(producerProperties)); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); consumerProperties.setHeaderMode(HeaderMode.none); DirectChannel moduleInputChannel = createBindableChannel("input", createConsumerBindingProperties(consumerProperties)); Binding<MessageChannel> producerBinding = binder.bindProducer("raw.0", moduleOutputChannel, producerProperties); Binding<MessageChannel> consumerBinding = binder.bindConsumer("raw.0", "test", moduleInputChannel, consumerProperties); Message<?> message = org.springframework.integration.support.MessageBuilder .withPayload("testSendAndReceiveWithRawMode".getBytes()).build(); // Let the consumer actually bind to the producer before sending a msg binderBindUnbindLatency(); moduleOutputChannel.send(message); CountDownLatch latch = new CountDownLatch(1); AtomicReference<Message<byte[]>> inboundMessageRef = new AtomicReference<>(); moduleInputChannel.subscribe(message1 -> { try { inboundMessageRef.set((Message<byte[]>) message1); } finally { latch.countDown(); } }); Assert.isTrue(latch.await(5, TimeUnit.SECONDS), "Failed to receive message"); assertThat(inboundMessageRef.get()).isNotNull(); assertThat( new String(inboundMessageRef.get().getPayload(), StandardCharsets.UTF_8)) .isEqualTo("testSendAndReceiveWithRawMode"); producerBinding.unbind(); consumerBinding.unbind(); }
Example #11
Source File: RabbitMessageChannelBinder.java From spring-cloud-stream-binder-rabbit with Apache License 2.0 | 4 votes |
@Override protected MessageHandler createProducerMessageHandler( final ProducerDestination producerDestination, ExtendedProducerProperties<RabbitProducerProperties> producerProperties, MessageChannel errorChannel) { Assert.state( !HeaderMode.embeddedHeaders.equals(producerProperties.getHeaderMode()), "the RabbitMQ binder does not support embedded headers since RabbitMQ supports headers natively"); String prefix = producerProperties.getExtension().getPrefix(); String exchangeName = producerDestination.getName(); String destination = StringUtils.isEmpty(prefix) ? exchangeName : exchangeName.substring(prefix.length()); final AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint( buildRabbitTemplate(producerProperties.getExtension(), errorChannel != null)); endpoint.setExchangeName(producerDestination.getName()); RabbitProducerProperties extendedProperties = producerProperties.getExtension(); boolean expressionInterceptorNeeded = expressionInterceptorNeeded( extendedProperties); Expression routingKeyExpression = extendedProperties.getRoutingKeyExpression(); if (!producerProperties.isPartitioned()) { if (routingKeyExpression == null) { endpoint.setRoutingKey(destination); } else { if (expressionInterceptorNeeded) { endpoint.setRoutingKeyExpressionString("headers['" + RabbitExpressionEvaluatingInterceptor.ROUTING_KEY_HEADER + "']"); } else { endpoint.setRoutingKeyExpression(routingKeyExpression); } } } else { if (routingKeyExpression == null) { endpoint.setRoutingKeyExpression( buildPartitionRoutingExpression(destination, false)); } else { if (expressionInterceptorNeeded) { endpoint.setRoutingKeyExpression( buildPartitionRoutingExpression("headers['" + RabbitExpressionEvaluatingInterceptor.ROUTING_KEY_HEADER + "']", true)); } else { endpoint.setRoutingKeyExpression(buildPartitionRoutingExpression( routingKeyExpression.getExpressionString(), true)); } } } if (extendedProperties.getDelayExpression() != null) { if (expressionInterceptorNeeded) { endpoint.setDelayExpressionString("headers['" + RabbitExpressionEvaluatingInterceptor.DELAY_HEADER + "']"); } else { endpoint.setDelayExpression(extendedProperties.getDelayExpression()); } } DefaultAmqpHeaderMapper mapper = DefaultAmqpHeaderMapper.outboundMapper(); List<String> headerPatterns = new ArrayList<>(extendedProperties.getHeaderPatterns().length + 3); headerPatterns.add("!" + BinderHeaders.PARTITION_HEADER); headerPatterns.add("!" + IntegrationMessageHeaderAccessor.SOURCE_DATA); headerPatterns.add("!" + IntegrationMessageHeaderAccessor.DELIVERY_ATTEMPT); headerPatterns.addAll(Arrays.asList(extendedProperties.getHeaderPatterns())); mapper.setRequestHeaderNames( headerPatterns.toArray(new String[headerPatterns.size()])); endpoint.setHeaderMapper(mapper); endpoint.setDefaultDeliveryMode(extendedProperties.getDeliveryMode()); endpoint.setBeanFactory(this.getBeanFactory()); if (errorChannel != null) { checkConnectionFactoryIsErrorCapable(); endpoint.setReturnChannel(errorChannel); endpoint.setConfirmNackChannel(errorChannel); String ackChannelBeanName = StringUtils .hasText(extendedProperties.getConfirmAckChannel()) ? extendedProperties.getConfirmAckChannel() : IntegrationContextUtils.NULL_CHANNEL_BEAN_NAME; if (!ackChannelBeanName.equals(IntegrationContextUtils.NULL_CHANNEL_BEAN_NAME) && !getApplicationContext().containsBean(ackChannelBeanName)) { GenericApplicationContext context = (GenericApplicationContext) getApplicationContext(); context.registerBean(ackChannelBeanName, DirectChannel.class, () -> new DirectChannel()); } endpoint.setConfirmAckChannelName(ackChannelBeanName); endpoint.setConfirmCorrelationExpressionString("#root"); endpoint.setErrorMessageStrategy(new DefaultErrorMessageStrategy()); } endpoint.setHeadersMappedLast(true); return endpoint; }
Example #12
Source File: RabbitMessageChannelBinder.java From spring-cloud-stream-binder-rabbit with Apache License 2.0 | 4 votes |
@Override protected MessageProducer createConsumerEndpoint( ConsumerDestination consumerDestination, String group, ExtendedConsumerProperties<RabbitConsumerProperties> properties) { Assert.state(!HeaderMode.embeddedHeaders.equals(properties.getHeaderMode()), "the RabbitMQ binder does not support embedded headers since RabbitMQ supports headers natively"); String destination = consumerDestination.getName(); boolean directContainer = properties.getExtension().getContainerType() .equals(ContainerType.DIRECT); AbstractMessageListenerContainer listenerContainer = directContainer ? new DirectMessageListenerContainer(this.connectionFactory) : new SimpleMessageListenerContainer(this.connectionFactory); listenerContainer .setAcknowledgeMode(properties.getExtension().getAcknowledgeMode()); listenerContainer.setChannelTransacted(properties.getExtension().isTransacted()); listenerContainer .setDefaultRequeueRejected(properties.getExtension().isRequeueRejected()); int concurrency = properties.getConcurrency(); concurrency = concurrency > 0 ? concurrency : 1; if (directContainer) { setDMLCProperties(properties, (DirectMessageListenerContainer) listenerContainer, concurrency); } else { setSMLCProperties(properties, (SimpleMessageListenerContainer) listenerContainer, concurrency); } listenerContainer.setPrefetchCount(properties.getExtension().getPrefetch()); listenerContainer .setRecoveryInterval(properties.getExtension().getRecoveryInterval()); listenerContainer.setTaskExecutor( new SimpleAsyncTaskExecutor(consumerDestination.getName() + "-")); String[] queues = StringUtils.tokenizeToStringArray(destination, ",", true, true); listenerContainer.setQueueNames(queues); listenerContainer.setAfterReceivePostProcessors(this.decompressingPostProcessor); listenerContainer.setMessagePropertiesConverter( RabbitMessageChannelBinder.inboundMessagePropertiesConverter); listenerContainer.setExclusive(properties.getExtension().isExclusive()); listenerContainer .setMissingQueuesFatal(properties.getExtension().getMissingQueuesFatal()); if (properties.getExtension().getFailedDeclarationRetryInterval() != null) { listenerContainer.setFailedDeclarationRetryInterval( properties.getExtension().getFailedDeclarationRetryInterval()); } if (getApplicationEventPublisher() != null) { listenerContainer .setApplicationEventPublisher(getApplicationEventPublisher()); } else if (getApplicationContext() != null) { listenerContainer.setApplicationEventPublisher(getApplicationContext()); } getContainerCustomizer().configure(listenerContainer, consumerDestination.getName(), group); if (StringUtils.hasText(properties.getExtension().getConsumerTagPrefix())) { final AtomicInteger index = new AtomicInteger(); listenerContainer.setConsumerTagStrategy( q -> properties.getExtension().getConsumerTagPrefix() + "#" + index.getAndIncrement()); } listenerContainer.afterPropertiesSet(); AmqpInboundChannelAdapter adapter = new AmqpInboundChannelAdapter( listenerContainer); adapter.setBindSourceMessage(true); adapter.setBeanFactory(this.getBeanFactory()); adapter.setBeanName("inbound." + destination); DefaultAmqpHeaderMapper mapper = DefaultAmqpHeaderMapper.inboundMapper(); mapper.setRequestHeaderNames(properties.getExtension().getHeaderPatterns()); adapter.setHeaderMapper(mapper); ErrorInfrastructure errorInfrastructure = registerErrorInfrastructure( consumerDestination, group, properties); if (properties.getMaxAttempts() > 1) { adapter.setRetryTemplate(buildRetryTemplate(properties)); adapter.setRecoveryCallback(errorInfrastructure.getRecoverer()); } else { adapter.setErrorMessageStrategy(errorMessageStrategy); adapter.setErrorChannel(errorInfrastructure.getErrorChannel()); } adapter.setMessageConverter(passThoughConverter); return adapter; }