org.springframework.cloud.stream.binder.ExtendedProducerProperties Java Examples
The following examples show how to use
org.springframework.cloud.stream.binder.ExtendedProducerProperties.
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: RabbitTestBinder.java From spring-cloud-stream-binder-rabbit with Apache License 2.0 | 6 votes |
@Override public Binding<MessageChannel> bindProducer(String name, MessageChannel moduleOutputChannel, ExtendedProducerProperties<RabbitProducerProperties> properties) { this.queues.add(properties.getExtension().getPrefix() + name + ".default"); this.exchanges.add(properties.getExtension().getPrefix() + name); if (properties.getRequiredGroups() != null) { for (String group : properties.getRequiredGroups()) { if (properties.getExtension().isQueueNameGroupOnly()) { this.queues.add(properties.getExtension().getPrefix() + group); } else { this.queues.add( properties.getExtension().getPrefix() + name + "." + group); } } } this.prefixes.add(properties.getExtension().getPrefix()); deadLetters(properties.getExtension()); return super.bindProducer(name, moduleOutputChannel, properties); }
Example #2
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 #3
Source File: KinesisMessageChannelBinder.java From spring-cloud-stream-binder-aws-kinesis with Apache License 2.0 | 6 votes |
@Override protected MessageHandler createProducerMessageHandler(ProducerDestination destination, ExtendedProducerProperties<KinesisProducerProperties> producerProperties, MessageChannel errorChannel) { FunctionExpression<Message<?>> partitionKeyExpression = new FunctionExpression<>((m) -> m.getHeaders().containsKey(BinderHeaders.PARTITION_HEADER) ? m.getHeaders().get(BinderHeaders.PARTITION_HEADER) : m.getPayload().hashCode()); final AbstractAwsMessageHandler<?> messageHandler; if (this.configurationProperties.isKplKclEnabled()) { messageHandler = createKplMessageHandler(destination, partitionKeyExpression); } else { messageHandler = createKinesisMessageHandler(destination, partitionKeyExpression); } messageHandler.setSync(producerProperties.getExtension().isSync()); messageHandler.setSendTimeout(producerProperties.getExtension().getSendTimeout()); messageHandler.setFailureChannel(errorChannel); messageHandler.setBeanFactory(getBeanFactory()); this.streamsInUse.add(destination.getName()); return messageHandler; }
Example #4
Source File: KinesisStreamProvisionerTests.java From spring-cloud-stream-binder-aws-kinesis with Apache License 2.0 | 6 votes |
@Test void testProvisionProducerSuccessfulWithExistingStream() { AmazonKinesis amazonKinesisMock = mock(AmazonKinesis.class); KinesisBinderConfigurationProperties binderProperties = new KinesisBinderConfigurationProperties(); KinesisStreamProvisioner provisioner = new KinesisStreamProvisioner( amazonKinesisMock, binderProperties); ExtendedProducerProperties<KinesisProducerProperties> extendedProducerProperties = new ExtendedProducerProperties<>(new KinesisProducerProperties()); String name = "test-stream"; DescribeStreamResult describeStreamResult = describeStreamResultWithShards( Collections.singletonList(new Shard())); when(amazonKinesisMock.describeStream(any(DescribeStreamRequest.class))) .thenReturn(describeStreamResult); ProducerDestination destination = provisioner.provisionProducerDestination(name, extendedProducerProperties); verify(amazonKinesisMock).describeStream(any(DescribeStreamRequest.class)); assertThat(destination.getName()).isEqualTo(name); }
Example #5
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 6 votes |
@Test public void testNoBrokerOverride() throws Exception { Binder binder = getBinder(); ExtendedProducerProperties<KafkaProducerProperties> producerProperties = createProducerProperties(); producerProperties.getExtension().getConfiguration().put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "foo"); BindingProperties outputBindingProperties = createProducerBindingProperties(producerProperties); DirectChannel moduleOutputChannel = createBindableChannel("output", outputBindingProperties); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); consumerProperties.getExtension().getConfiguration().put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "foo"); BindingProperties consumerBindingProperties = createConsumerBindingProperties(consumerProperties); DirectChannel moduleInputChannel = createBindableChannel("input", consumerBindingProperties); assertThatExceptionOfType(BinderException.class).isThrownBy(() -> binder.bindProducer("foo.bar", moduleOutputChannel, outputBindingProperties.getProducer())) .withCauseExactlyInstanceOf(IllegalStateException.class); assertThatExceptionOfType(BinderException.class).isThrownBy(() -> binder.bindConsumer("foo.bar", "testSendAndReceive", moduleInputChannel, consumerProperties)) .withCauseExactlyInstanceOf(IllegalStateException.class); }
Example #6
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 6 votes |
@Test @SuppressWarnings("unchecked") public void testSyncProducerMetadata() throws Exception { Binder binder = getBinder(createConfigurationProperties()); DirectChannel output = new DirectChannel(); String testTopicName = UUID.randomUUID().toString(); ExtendedProducerProperties<KafkaProducerProperties> properties = createProducerProperties(); properties.getExtension().setSync(true); Binding<MessageChannel> producerBinding = binder.bindProducer(testTopicName, output, properties); DirectFieldAccessor accessor = new DirectFieldAccessor( extractEndpoint(producerBinding)); KafkaProducerMessageHandler wrappedInstance = (KafkaProducerMessageHandler) accessor .getWrappedInstance(); assertThat(new DirectFieldAccessor(wrappedInstance).getPropertyValue("sync") .equals(Boolean.TRUE)) .withFailMessage("Kafka Sync Producer should have been enabled."); producerBinding.unbind(); }
Example #7
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 6 votes |
@Test @SuppressWarnings("unchecked") public void testSendTimeoutExpressionProducerMetadata() throws Exception { Binder binder = getBinder(createConfigurationProperties()); DirectChannel output = new DirectChannel(); String testTopicName = UUID.randomUUID().toString(); ExtendedProducerProperties<KafkaProducerProperties> properties = createProducerProperties(); properties.getExtension().setSync(true); SpelExpressionParser parser = new SpelExpressionParser(); Expression sendTimeoutExpression = parser.parseExpression("5000"); properties.getExtension().setSendTimeoutExpression(sendTimeoutExpression); Binding<MessageChannel> producerBinding = binder.bindProducer(testTopicName, output, properties); DirectFieldAccessor accessor = new DirectFieldAccessor( extractEndpoint(producerBinding)); KafkaProducerMessageHandler wrappedInstance = (KafkaProducerMessageHandler) accessor .getWrappedInstance(); assertThat(new DirectFieldAccessor(wrappedInstance).getPropertyValue("sendTimeoutExpression") .equals(sendTimeoutExpression)); producerBinding.unbind(); }
Example #8
Source File: PubSubChannelProvisioner.java From spring-cloud-gcp with Apache License 2.0 | 5 votes |
@Override public ProducerDestination provisionProducerDestination(String topic, ExtendedProducerProperties<PubSubProducerProperties> properties) throws ProvisioningException { makeSureTopicExists(topic, properties.getExtension().isAutoCreateResources()); return new PubSubProducerDestination(topic); }
Example #9
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Override protected ExtendedProducerProperties<KafkaProducerProperties> createProducerProperties() { ExtendedProducerProperties<KafkaProducerProperties> producerProperties = new ExtendedProducerProperties<>( new KafkaProducerProperties()); producerProperties.getExtension().setSync(true); return producerProperties; }
Example #10
Source File: AutoCreateTopicDisabledTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Test public void testAutoCreateTopicDisabledFailsOnProducerIfTopicNonExistentOnBroker() throws Throwable { KafkaProperties kafkaProperties = new TestKafkaProperties(); kafkaProperties.setBootstrapServers(Collections .singletonList(embeddedKafka.getEmbeddedKafka().getBrokersAsString())); KafkaBinderConfigurationProperties configurationProperties = new KafkaBinderConfigurationProperties( kafkaProperties); // disable auto create topic on the binder. configurationProperties.setAutoCreateTopics(false); // reduce the wait time on the producer blocking operations. configurationProperties.getConfiguration().put("max.block.ms", "3000"); KafkaTopicProvisioner provisioningProvider = new KafkaTopicProvisioner( configurationProperties, kafkaProperties); SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy(1); final RetryTemplate metadataRetryOperations = new RetryTemplate(); metadataRetryOperations.setRetryPolicy(simpleRetryPolicy); provisioningProvider.setMetadataRetryOperations(metadataRetryOperations); KafkaMessageChannelBinder binder = new KafkaMessageChannelBinder( configurationProperties, provisioningProvider); final String testTopicName = "nonExistent" + System.currentTimeMillis(); ExtendedProducerProperties<KafkaProducerProperties> properties = new ExtendedProducerProperties<>( new KafkaProducerProperties()); expectedException.expect(BinderException.class); expectedException.expectCause(isA(UnknownTopicOrPartitionException.class)); binder.bindProducer(testTopicName, new DirectChannel(), properties); }
Example #11
Source File: KafkaMessageChannelBinder.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
ProducerConfigurationMessageHandler(KafkaTemplate<byte[], byte[]> kafkaTemplate, String topic, ExtendedProducerProperties<KafkaProducerProperties> producerProperties, ProducerFactory<byte[], byte[]> producerFactory) { super(kafkaTemplate); if (producerProperties.getExtension().isUseTopicHeader()) { setTopicExpression(PARSER.parseExpression("headers['" + KafkaHeaders.TOPIC + "'] ?: '" + topic + "'")); } else { setTopicExpression(new LiteralExpression(topic)); } Expression messageKeyExpression = producerProperties.getExtension().getMessageKeyExpression(); if (expressionInterceptorNeeded(producerProperties)) { messageKeyExpression = PARSER.parseExpression("headers['" + KafkaExpressionEvaluatingInterceptor.MESSAGE_KEY_HEADER + "']"); } setMessageKeyExpression(messageKeyExpression); setBeanFactory(KafkaMessageChannelBinder.this.getBeanFactory()); if (producerProperties.isPartitioned()) { setPartitionIdExpression(PARSER.parseExpression( "headers['" + BinderHeaders.PARTITION_HEADER + "']")); } if (producerProperties.getExtension().isSync()) { setSync(true); } if (producerProperties.getExtension().getSendTimeoutExpression() != null) { setSendTimeoutExpression(producerProperties.getExtension().getSendTimeoutExpression()); } this.producerFactory = producerFactory; }
Example #12
Source File: KafkaMessageChannelBinder.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Override protected boolean useNativeEncoding( ExtendedProducerProperties<KafkaProducerProperties> producerProperties) { if (transactionManager(producerProperties.getExtension().getTransactionManager()) != null) { return this.configurationProperties.getTransaction().getProducer() .isUseNativeEncoding(); } return super.useNativeEncoding(producerProperties); }
Example #13
Source File: KafkaMessageChannelBinder.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
private boolean expressionInterceptorNeeded( ExtendedProducerProperties<KafkaProducerProperties> producerProperties) { if (producerProperties.isUseNativeEncoding()) { return false; // payload will be intact when it reaches the adapter } else { Expression messageKeyExpression = producerProperties.getExtension().getMessageKeyExpression(); return messageKeyExpression != null && interceptorNeededPattern.matcher(messageKeyExpression.getExpressionString()).find(); } }
Example #14
Source File: KafkaMessageChannelBinder.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Override protected void postProcessOutputChannel(MessageChannel outputChannel, ExtendedProducerProperties<KafkaProducerProperties> producerProperties) { if (expressionInterceptorNeeded(producerProperties)) { ((AbstractMessageChannel) outputChannel).addInterceptor(0, new KafkaExpressionEvaluatingInterceptor( producerProperties.getExtension().getMessageKeyExpression(), getEvaluationContext())); } }
Example #15
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Test @SuppressWarnings("unchecked") public void testDynamicKeyExpression() throws Exception { Binder binder = getBinder(createConfigurationProperties()); QueueChannel moduleInputChannel = new QueueChannel(); ExtendedProducerProperties<KafkaProducerProperties> producerProperties = createProducerProperties(); producerProperties.getExtension().getConfiguration().put("key.serializer", StringSerializer.class.getName()); producerProperties.getExtension().setMessageKeyExpression( spelExpressionParser.parseExpression("headers.key")); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); String uniqueBindingId = UUID.randomUUID().toString(); DirectChannel moduleOutputChannel = createBindableChannel("output", createProducerBindingProperties(producerProperties)); Binding<MessageChannel> producerBinding = binder.bindProducer( "foo" + uniqueBindingId + ".0", moduleOutputChannel, producerProperties); Binding<MessageChannel> consumerBinding = binder.bindConsumer( "foo" + uniqueBindingId + ".0", null, moduleInputChannel, consumerProperties); Thread.sleep(1000); Message<?> message = MessageBuilder.withPayload("somePayload") .setHeader("key", "myDynamicKey").build(); // Let the consumer actually bind to the producer before sending a msg binderBindUnbindLatency(); moduleOutputChannel.send(message); Message<?> inbound = receive(moduleInputChannel); assertThat(inbound).isNotNull(); String receivedKey = new String(inbound.getHeaders() .get(KafkaHeaders.RECEIVED_MESSAGE_KEY, byte[].class)); assertThat(receivedKey).isEqualTo("myDynamicKey"); producerBinding.unbind(); consumerBinding.unbind(); }
Example #16
Source File: PubSubMessageChannelBinder.java From spring-cloud-gcp with Apache License 2.0 | 5 votes |
@Override protected MessageHandler createProducerMessageHandler(ProducerDestination destination, ExtendedProducerProperties<PubSubProducerProperties> producerProperties, MessageChannel errorChannel) { PubSubMessageHandler messageHandler = new PubSubMessageHandler(this.pubSubTemplate, destination.getName()); messageHandler.setBeanFactory(getBeanFactory()); return messageHandler; }
Example #17
Source File: KinesisBinderTests.java From spring-cloud-stream-binder-aws-kinesis with Apache License 2.0 | 5 votes |
@Override protected ExtendedProducerProperties<KinesisProducerProperties> createProducerProperties() { ExtendedProducerProperties<KinesisProducerProperties> producerProperties = new ExtendedProducerProperties<>( new KinesisProducerProperties()); producerProperties.setPartitionKeyExpression(new LiteralExpression("1")); producerProperties.getExtension().setSync(true); return producerProperties; }
Example #18
Source File: KStreamBinder.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Override @SuppressWarnings("unchecked") protected Binding<KStream<Object, Object>> doBindProducer(String name, KStream<Object, Object> outboundBindTarget, ExtendedProducerProperties<KafkaStreamsProducerProperties> properties) { ExtendedProducerProperties<KafkaProducerProperties> extendedProducerProperties = (ExtendedProducerProperties) properties; this.kafkaTopicProvisioner.provisionProducerDestination(name, extendedProducerProperties); Serde<?> keySerde = this.keyValueSerdeResolver .getOuboundKeySerde(properties.getExtension(), kafkaStreamsBindingInformationCatalogue.getOutboundKStreamResolvable()); LOG.info("Key Serde used for (outbound) " + name + ": " + keySerde.getClass().getName()); Serde<?> valueSerde; if (properties.isUseNativeEncoding()) { valueSerde = this.keyValueSerdeResolver.getOutboundValueSerde(properties, properties.getExtension(), kafkaStreamsBindingInformationCatalogue.getOutboundKStreamResolvable()); } else { valueSerde = Serdes.ByteArray(); } LOG.info("Value Serde used for (outbound) " + name + ": " + valueSerde.getClass().getName()); to(properties.isUseNativeEncoding(), name, outboundBindTarget, (Serde<Object>) keySerde, (Serde<Object>) valueSerde, properties.getExtension()); return new DefaultBinding<>(name, null, outboundBindTarget, null); }
Example #19
Source File: GlobalKTableBinder.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Override protected Binding<GlobalKTable<Object, Object>> doBindProducer(String name, GlobalKTable<Object, Object> outboundBindTarget, ExtendedProducerProperties<KafkaStreamsProducerProperties> properties) { throw new UnsupportedOperationException( "No producer level binding is allowed for GlobalKTable"); }
Example #20
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void testPartitionedNative() throws Exception { Binder binder = getBinder(); ExtendedProducerProperties<KafkaProducerProperties> properties = createProducerProperties(); properties.setPartitionCount(6); DirectChannel output = createBindableChannel("output", createProducerBindingProperties(properties)); output.setBeanName("test.output"); Binding<MessageChannel> outputBinding = binder.bindProducer("partNative.raw.0", output, properties); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); QueueChannel input0 = new QueueChannel(); input0.setBeanName("test.inputNative"); Binding<MessageChannel> inputBinding = binder.bindConsumer("partNative.raw.0", "test", input0, consumerProperties); output.send(new GenericMessage<>("foo".getBytes(), Collections.singletonMap(KafkaHeaders.PARTITION_ID, 5))); Message<?> received = receive(input0); assertThat(received).isNotNull(); assertThat(received.getPayload()).isEqualTo("foo".getBytes()); assertThat(received.getHeaders().get(KafkaHeaders.RECEIVED_PARTITION_ID)) .isEqualTo(5); inputBinding.unbind(); outputBinding.unbind(); }
Example #21
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Test @SuppressWarnings("unchecked") public void testCustomPartitionCountOverridesDefaultIfLarger() throws Exception { byte[] testPayload = new byte[2048]; Arrays.fill(testPayload, (byte) 65); KafkaBinderConfigurationProperties binderConfiguration = createConfigurationProperties(); binderConfiguration.setMinPartitionCount(10); Binder binder = getBinder(binderConfiguration); QueueChannel moduleInputChannel = new QueueChannel(); ExtendedProducerProperties<KafkaProducerProperties> producerProperties = createProducerProperties(); producerProperties.setPartitionCount(10); producerProperties.setPartitionKeyExpression(new LiteralExpression("foo")); DirectChannel moduleOutputChannel = createBindableChannel("output", createProducerBindingProperties(producerProperties)); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); long uniqueBindingId = System.currentTimeMillis(); Binding<MessageChannel> producerBinding = binder.bindProducer( "foo" + uniqueBindingId + ".0", moduleOutputChannel, producerProperties); Binding<MessageChannel> consumerBinding = binder.bindConsumer( "foo" + uniqueBindingId + ".0", null, moduleInputChannel, consumerProperties); Message<?> message = org.springframework.integration.support.MessageBuilder .withPayload(testPayload).build(); // Let the consumer actually bind to the producer before sending a msg binderBindUnbindLatency(); moduleOutputChannel.send(message); Message<?> inbound = receive(moduleInputChannel); assertThat(inbound).isNotNull(); assertThat((byte[]) inbound.getPayload()).containsExactly(testPayload); assertThat(partitionSize("foo" + uniqueBindingId + ".0")).isEqualTo(10); producerBinding.unbind(); consumerBinding.unbind(); }
Example #22
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Test @SuppressWarnings("unchecked") public void testCustomPartitionCountDoesNotOverridePartitioningIfSmaller() throws Exception { byte[] testPayload = new byte[2048]; Arrays.fill(testPayload, (byte) 65); KafkaBinderConfigurationProperties binderConfiguration = createConfigurationProperties(); binderConfiguration.setMinPartitionCount(6); Binder binder = getBinder(binderConfiguration); QueueChannel moduleInputChannel = new QueueChannel(); ExtendedProducerProperties<KafkaProducerProperties> producerProperties = createProducerProperties(); producerProperties.setPartitionCount(5); producerProperties.setPartitionKeyExpression( spelExpressionParser.parseExpression("payload")); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); long uniqueBindingId = System.currentTimeMillis(); DirectChannel moduleOutputChannel = createBindableChannel("output", createProducerBindingProperties(producerProperties)); Binding<MessageChannel> producerBinding = binder.bindProducer( "foo" + uniqueBindingId + ".0", moduleOutputChannel, producerProperties); Binding<MessageChannel> consumerBinding = binder.bindConsumer( "foo" + uniqueBindingId + ".0", null, moduleInputChannel, consumerProperties); Thread.sleep(1000); Message<?> message = org.springframework.integration.support.MessageBuilder .withPayload(testPayload).build(); // Let the consumer actually bind to the producer before sending a msg binderBindUnbindLatency(); moduleOutputChannel.send(message); Message<?> inbound = receive(moduleInputChannel); assertThat(inbound).isNotNull(); assertThat((byte[]) inbound.getPayload()).containsExactly(testPayload); assertThat(partitionSize("foo" + uniqueBindingId + ".0")).isEqualTo(6); producerBinding.unbind(); consumerBinding.unbind(); }
Example #23
Source File: RocketMQTopicProvisioner.java From spring-cloud-alibaba with Apache License 2.0 | 5 votes |
@Override public ProducerDestination provisionProducerDestination(String name, ExtendedProducerProperties<RocketMQProducerProperties> properties) throws ProvisioningException { checkTopic(name); return new RocketProducerDestination(name); }
Example #24
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Test @SuppressWarnings("unchecked") public void testCustomPartitionCountOverridesPartitioningIfLarger() throws Exception { byte[] testPayload = new byte[2048]; Arrays.fill(testPayload, (byte) 65); KafkaBinderConfigurationProperties binderConfiguration = createConfigurationProperties(); binderConfiguration.setMinPartitionCount(4); Binder binder = getBinder(binderConfiguration); QueueChannel moduleInputChannel = new QueueChannel(); ExtendedProducerProperties<KafkaProducerProperties> producerProperties = createProducerProperties(); producerProperties.setPartitionCount(5); producerProperties.setPartitionKeyExpression( spelExpressionParser.parseExpression("payload")); DirectChannel moduleOutputChannel = createBindableChannel("output", createProducerBindingProperties(producerProperties)); ExtendedConsumerProperties<KafkaConsumerProperties> consumerProperties = createConsumerProperties(); long uniqueBindingId = System.currentTimeMillis(); Binding<MessageChannel> producerBinding = binder.bindProducer( "foo" + uniqueBindingId + ".0", moduleOutputChannel, producerProperties); Binding<MessageChannel> consumerBinding = binder.bindConsumer( "foo" + uniqueBindingId + ".0", null, moduleInputChannel, consumerProperties); Message<?> message = org.springframework.integration.support.MessageBuilder .withPayload(testPayload).build(); // Let the consumer actually bind to the producer before sending a msg binderBindUnbindLatency(); moduleOutputChannel.send(message); Message<?> inbound = receive(moduleInputChannel); assertThat(inbound).isNotNull(); assertThat((byte[]) inbound.getPayload()).containsExactly(testPayload); assertThat(partitionSize("foo" + uniqueBindingId + ".0")).isEqualTo(5); producerBinding.unbind(); consumerBinding.unbind(); }
Example #25
Source File: KafkaBinderTests.java From spring-cloud-stream-binder-kafka with Apache License 2.0 | 5 votes |
@Test @SuppressWarnings("unchecked") public void testMessageKeyInPayload() throws Exception { Binding<?> producerBinding = null; try { String testPayload = "test"; ExtendedProducerProperties<KafkaProducerProperties> producerProperties = createProducerProperties(); producerProperties.getExtension() .setMessageKeyExpression(spelExpressionParser.parseExpression("payload.field.bytes")); DirectChannel moduleOutputChannel = createBindableChannel("output", createProducerBindingProperties(producerProperties)); String testTopicName = "existing" + System.currentTimeMillis(); KafkaTestBinder binder = getBinder(); producerBinding = binder.bindProducer(testTopicName, moduleOutputChannel, producerProperties); moduleOutputChannel.addInterceptor(new ChannelInterceptor() { @Override public Message<?> preSend(Message<?> message, MessageChannel channel) { assertThat(message.getHeaders() .get(KafkaExpressionEvaluatingInterceptor.MESSAGE_KEY_HEADER)) .isEqualTo("foo".getBytes()); return message; } }); moduleOutputChannel.send( new GenericMessage<>(new Pojo("foo"), Collections.singletonMap(KafkaHeaders.PARTITION_ID, 0))); } finally { if (producerBinding != null) { producerBinding.unbind(); } } }
Example #26
Source File: RabbitMessageChannelBinder.java From spring-cloud-stream-binder-rabbit with Apache License 2.0 | 5 votes |
@Override protected void postProcessOutputChannel(MessageChannel outputChannel, ExtendedProducerProperties<RabbitProducerProperties> producerProperties) { RabbitProducerProperties extendedProperties = producerProperties.getExtension(); if (expressionInterceptorNeeded(extendedProperties)) { ((AbstractMessageChannel) outputChannel).addInterceptor(0, new RabbitExpressionEvaluatingInterceptor( extendedProperties.getRoutingKeyExpression(), extendedProperties.getDelayExpression(), getEvaluationContext())); } }
Example #27
Source File: RabbitBinderTests.java From spring-cloud-stream-binder-rabbit with Apache License 2.0 | 5 votes |
@Override protected ExtendedProducerProperties<RabbitProducerProperties> createProducerProperties() { ExtendedProducerProperties<RabbitProducerProperties> props = new ExtendedProducerProperties<>( new RabbitProducerProperties()); if (testName.getMethodName().equals("testPartitionedModuleSpEL")) { props.getExtension().setRoutingKeyExpression( spelExpressionParser.parseExpression("'part.0'")); } return props; }
Example #28
Source File: RabbitBinderTests.java From spring-cloud-stream-binder-rabbit with Apache License 2.0 | 5 votes |
@Test public void testProducerAckChannel() throws Exception { RabbitTestBinder binder = getBinder(); CachingConnectionFactory ccf = this.rabbitAvailableRule.getResource(); ccf.setPublisherReturns(true); ccf.setPublisherConfirms(true); ccf.resetConnection(); DirectChannel moduleOutputChannel = createBindableChannel("output", new BindingProperties()); ExtendedProducerProperties<RabbitProducerProperties> producerProps = createProducerProperties(); producerProps.setErrorChannelEnabled(true); producerProps.getExtension().setConfirmAckChannel("acksChannel"); Binding<MessageChannel> producerBinding = binder.bindProducer("acks.0", moduleOutputChannel, producerProps); final Message<?> message = MessageBuilder.withPayload("acksMessage".getBytes()) .build(); final AtomicReference<Message<?>> confirm = new AtomicReference<>(); final CountDownLatch confirmLatch = new CountDownLatch(1); binder.getApplicationContext().getBean("acksChannel", DirectChannel.class) .subscribe(m -> { confirm.set(m); confirmLatch.countDown(); }); moduleOutputChannel.send(message); assertThat(confirmLatch.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(confirm.get().getPayload()).isEqualTo("acksMessage".getBytes()); producerBinding.unbind(); }
Example #29
Source File: RabbitBinderTests.java From spring-cloud-stream-binder-rabbit with Apache License 2.0 | 5 votes |
@Test public void testCustomBatchingStrategy() throws Exception { RabbitTestBinder binder = getBinder(); ExtendedProducerProperties<RabbitProducerProperties> producerProperties = createProducerProperties(); producerProperties.getExtension().setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT); producerProperties.getExtension().setBatchingEnabled(true); producerProperties.getExtension().setBatchingStrategyBeanName("testCustomBatchingStrategy"); producerProperties.setRequiredGroups("default"); ConfigurableListableBeanFactory beanFactory = binder.getApplicationContext().getBeanFactory(); beanFactory.registerSingleton("testCustomBatchingStrategy", new TestBatchingStrategy()); DirectChannel output = createBindableChannel("output", createProducerBindingProperties(producerProperties)); output.setBeanName("batchingProducer"); Binding<MessageChannel> producerBinding = binder.bindProducer("batching.0", output, producerProperties); Log logger = spy(TestUtils.getPropertyValue(binder, "binder.compressingPostProcessor.logger", Log.class)); new DirectFieldAccessor(TestUtils.getPropertyValue(binder, "binder.compressingPostProcessor")) .setPropertyValue("logger", logger); when(logger.isTraceEnabled()).thenReturn(true); assertThat(TestUtils.getPropertyValue(binder, "binder.compressingPostProcessor.level")) .isEqualTo(Deflater.BEST_SPEED); output.send(new GenericMessage<>("0".getBytes())); output.send(new GenericMessage<>("1".getBytes())); output.send(new GenericMessage<>("2".getBytes())); output.send(new GenericMessage<>("3".getBytes())); output.send(new GenericMessage<>("4".getBytes())); Object out = spyOn("batching.0.default").receive(false); assertThat(out).isInstanceOf(byte[].class); assertThat(new String((byte[]) out)).isEqualTo("0\u0000\n1\u0000\n2\u0000\n3\u0000\n4\u0000\n"); producerBinding.unbind(); }
Example #30
Source File: BindingService.java From spring-cloud-stream with Apache License 2.0 | 5 votes |
@SuppressWarnings({ "unchecked", "rawtypes" }) public <T> Binding<T> bindProducer(T output, String outputName, boolean cache) { String bindingTarget = this.bindingServiceProperties .getBindingDestination(outputName); Class<?> outputClass = output.getClass(); if (output instanceof Advised) { outputClass = Stream.of(((Advised) output).getProxiedInterfaces()).filter(c -> !c.getName().contains("org.springframework")).findFirst() .orElse(outputClass); } Binder<T, ?, ProducerProperties> binder = (Binder<T, ?, ProducerProperties>) getBinder( outputName, outputClass); ProducerProperties producerProperties = this.bindingServiceProperties .getProducerProperties(outputName); if (binder instanceof ExtendedPropertiesBinder) { Object extension = ((ExtendedPropertiesBinder) binder) .getExtendedProducerProperties(outputName); ExtendedProducerProperties extendedProducerProperties = new ExtendedProducerProperties<>( extension); BeanUtils.copyProperties(producerProperties, extendedProducerProperties); producerProperties = extendedProducerProperties; } validate(producerProperties); Binding<T> binding = doBindProducer(output, bindingTarget, binder, producerProperties); if (cache) { this.producerBindings.put(outputName, binding); } return binding; }