From 4e719a96e2eecc3b9d5269fe87abfde15c5b4f95 Mon Sep 17 00:00:00 2001 From: liuliu Date: Thu, 22 Aug 2019 21:32:19 +0800 Subject: [PATCH 1/7] fix:#103 support resolvePlaceholders for selectorExpression @RocketMQMessageListener(topic = "${demo.rocketmq.test.consumer.topic}",selectorExpression="${demo.rocketmq.test.consumer.tags}" ,consumerGroup = "${demo.rocketmq.test.consumer.group}") --- .../spring/autoconfigure/ListenerContainerConfiguration.java | 4 ++++ .../spring/support/DefaultRocketMQListenerContainer.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java index 5d461bcf..efd70846 100644 --- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java +++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java @@ -135,6 +135,10 @@ private DefaultRocketMQListenerContainer createRocketMQListenerContainer(String container.setAccessChannel(AccessChannel.valueOf(accessChannel)); } container.setTopic(environment.resolvePlaceholders(annotation.topic())); + String tags = environment.resolvePlaceholders(annotation.selectorExpression()); + if (!StringUtils.isEmpty(tags)) { + container.setSelectorExpression(tags); + } container.setConsumerGroup(environment.resolvePlaceholders(annotation.consumerGroup())); container.setRocketMQMessageListener(annotation); container.setRocketMQListener((RocketMQListener) bean); diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java index 6a730107..53acfd5a 100644 --- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java +++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java @@ -204,6 +204,10 @@ public SelectorType getSelectorType() { return selectorType; } + public void setSelectorExpression(String selectorExpression) { + this.selectorExpression = selectorExpression; + } + public String getSelectorExpression() { return selectorExpression; } From a380c885469c4bd30f8b5efc19390b0548668b4e Mon Sep 17 00:00:00 2001 From: liuliu Date: Thu, 22 Aug 2019 23:36:53 +0800 Subject: [PATCH 2/7] fix:#103 support resolvePlaceholders for selectorExpression codestyle check --- .../autoconfigure/ListenerContainerConfiguration.java | 8 ++++---- .../spring/support/DefaultRocketMQListenerContainer.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java index efd70846..43411c49 100644 --- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java +++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java @@ -135,10 +135,10 @@ private DefaultRocketMQListenerContainer createRocketMQListenerContainer(String container.setAccessChannel(AccessChannel.valueOf(accessChannel)); } container.setTopic(environment.resolvePlaceholders(annotation.topic())); - String tags = environment.resolvePlaceholders(annotation.selectorExpression()); - if (!StringUtils.isEmpty(tags)) { - container.setSelectorExpression(tags); - } + String tags = environment.resolvePlaceholders(annotation.selectorExpression()); + if (!StringUtils.isEmpty(tags)) { + container.setSelectorExpression(tags); + } container.setConsumerGroup(environment.resolvePlaceholders(annotation.consumerGroup())); container.setRocketMQMessageListener(annotation); container.setRocketMQListener((RocketMQListener) bean); diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java index 53acfd5a..e31924da 100644 --- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java +++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java @@ -204,10 +204,10 @@ public SelectorType getSelectorType() { return selectorType; } - public void setSelectorExpression(String selectorExpression) { - this.selectorExpression = selectorExpression; - } - + public void setSelectorExpression(String selectorExpression) { + this.selectorExpression = selectorExpression; + } + public String getSelectorExpression() { return selectorExpression; } From 95ca29260b9fa6b0cad860b87144e9e257c391bd Mon Sep 17 00:00:00 2001 From: liuliu Date: Fri, 27 Sep 2019 10:20:22 +0800 Subject: [PATCH 3/7] fix:#103 support resolvePlaceholders for selectorExpression codestyle --- .../spring/support/DefaultRocketMQListenerContainer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java index e31924da..eb6f778a 100644 --- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java +++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java @@ -191,7 +191,6 @@ public void setRocketMQMessageListener(RocketMQMessageListener anno) { this.consumeMode = anno.consumeMode(); this.consumeThreadMax = anno.consumeThreadMax(); this.messageModel = anno.messageModel(); - this.selectorExpression = anno.selectorExpression(); this.selectorType = anno.selectorType(); this.consumeTimeout = anno.consumeTimeout(); } From f85574d7c4a2063d58392f5491df643e50591a1f Mon Sep 17 00:00:00 2001 From: liuliu Date: Fri, 27 Sep 2019 10:34:01 +0800 Subject: [PATCH 4/7] fix:#103 support resolvePlaceholders for selectorExpression codestyle --- .../spring/autoconfigure/ListenerContainerConfiguration.java | 5 +++-- .../spring/support/DefaultRocketMQListenerContainer.java | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java index 43411c49..927bf44c 100644 --- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java +++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/autoconfigure/ListenerContainerConfiguration.java @@ -126,7 +126,9 @@ private void registerContainer(String beanName, Object bean) { private DefaultRocketMQListenerContainer createRocketMQListenerContainer(String name, Object bean, RocketMQMessageListener annotation) { DefaultRocketMQListenerContainer container = new DefaultRocketMQListenerContainer(); - + + container.setRocketMQMessageListener(annotation); + String nameServer = environment.resolvePlaceholders(annotation.nameServer()); nameServer = StringUtils.isEmpty(nameServer) ? rocketMQProperties.getNameServer() : nameServer; String accessChannel = environment.resolvePlaceholders(annotation.accessChannel()); @@ -140,7 +142,6 @@ private DefaultRocketMQListenerContainer createRocketMQListenerContainer(String container.setSelectorExpression(tags); } container.setConsumerGroup(environment.resolvePlaceholders(annotation.consumerGroup())); - container.setRocketMQMessageListener(annotation); container.setRocketMQListener((RocketMQListener) bean); container.setObjectMapper(objectMapper); container.setName(name); // REVIEW ME, use the same clientId or multiple? diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java index eb6f778a..e31924da 100644 --- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java +++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java @@ -191,6 +191,7 @@ public void setRocketMQMessageListener(RocketMQMessageListener anno) { this.consumeMode = anno.consumeMode(); this.consumeThreadMax = anno.consumeThreadMax(); this.messageModel = anno.messageModel(); + this.selectorExpression = anno.selectorExpression(); this.selectorType = anno.selectorType(); this.consumeTimeout = anno.consumeTimeout(); } From d8a38d3df69cc4922ec3a3bf9fc24d595732599e Mon Sep 17 00:00:00 2001 From: liuliu Date: Sat, 28 Sep 2019 16:16:17 +0800 Subject: [PATCH 5/7] fix:#103 support resolvePlaceholders for selectorExpression codestyle --- .../RocketMQAutoConfigurationTest.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java index 18fdcca0..4457b95f 100644 --- a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java +++ b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java @@ -176,6 +176,27 @@ public void testRocketMQTransactionListener() { } + @Test + public void testPlaceholdersListenerContainer() { + runner.withPropertyValues("rocketmq.name-server=127.0.0.1:9876", + "demo.placeholders.consumer.group = abc3", + "demo.placeholders.consumer.topic = test", + "demo.placeholders.consumer.tags = tag1"). + withUserConfiguration(TestPlaceholdersConfig.class). + run((context) -> { + // No producer on consume side + assertThat(context).doesNotHaveBean(DefaultMQProducer.class); + // Auto-create consume container if existing Bean annotated with @RocketMQMessageListener + assertThat(context).hasBean("org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer_1"); + assertThat(context).getBean("org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer_1"). + hasFieldOrPropertyWithValue("nameServer", "127.0.0.1:9876"). + hasFieldOrPropertyWithValue("consumerGroup", "abc3"). + hasFieldOrPropertyWithValue("topic", "test"). + hasFieldOrPropertyWithValue("selectorExpression", "tag1"); + }); + } + + @Configuration static class TestConfig { @@ -272,5 +293,24 @@ public RocketMQTemplate extRocketMQTemplate() { static class MyExtRocketMQTemplate extends RocketMQTemplate { } + + @Configuration + static class TestPlaceholdersConfig { + + @Bean + public Object consumeListener() { + return new TestPlaceholdersListener(); + } + + } + + @RocketMQMessageListener(consumerGroup = "${demo.placeholders.consumer.group}", topic = "${demo.placeholders.consumer.topic}", selectorExpression = "${demo.placeholders.consumer.tags}") + static class TestPlaceholdersListener implements RocketMQListener { + + @Override + public void onMessage(Object message) { + + } + } } From be8b8a4b18154225a58bb6393898a58b7401bd9b Mon Sep 17 00:00:00 2001 From: 16534 <16534@DESKTOP-136P21N> Date: Mon, 28 Oct 2019 16:39:45 +0800 Subject: [PATCH 6/7] fix:#103 support resolvePlaceholders for selectorExpression codestyle and update test class with actual meaning. --- .../RocketMQAutoConfigurationTest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java index 4457b95f..a865e3d4 100644 --- a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java +++ b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java @@ -130,7 +130,7 @@ public void testRocketMQListenerWithSeveralObjectMappers() { @Test public void testExtRocketMQTemplate() { runner.withPropertyValues("rocketmq.name-server=127.0.0.1:9876"). - withUserConfiguration(ExtRocketMQTemplateConfig.class, CustomObjectMappersConfig.class). + withUserConfiguration(TestExtRocketMQTemplateConfig.class, CustomObjectMappersConfig.class). run(new ContextConsumer() { @Override public void accept(AssertableApplicationContext context) throws Throwable { @@ -141,7 +141,7 @@ public void accept(AssertableApplicationContext context) throws Throwable { }); runner.withPropertyValues("rocketmq.name-server=127.0.1.1:9876"). - withUserConfiguration(ExtRocketMQTemplateConfig.class, CustomObjectMappersConfig.class). + withUserConfiguration(TestExtRocketMQTemplateConfig.class, CustomObjectMappersConfig.class). run((context) -> { // No producer on consume side assertThat(context).getBean("extRocketMQTemplate").hasFieldOrProperty("producer"); @@ -202,12 +202,12 @@ static class TestConfig { @Bean public Object consumeListener() { - return new MyMessageListener(); + return new TestDefaultNameServerListener(); } @Bean public Object consumeListener1() { - return new MyMessageListener1(); + return new TestCustomNameServerListener(); } } @@ -238,7 +238,7 @@ public ObjectMapper rocketMQMessageObjectMapper() { } @RocketMQMessageListener(consumerGroup = "abc", topic = "test") - static class MyMessageListener implements RocketMQListener { + static class TestDefaultNameServerListener implements RocketMQListener { @Override public void onMessage(Object message) { @@ -247,7 +247,7 @@ public void onMessage(Object message) { } @RocketMQMessageListener(nameServer = "127.0.1.1:9876", consumerGroup = "abc1", topic = "test") - static class MyMessageListener1 implements RocketMQListener { + static class TestCustomNameServerListener implements RocketMQListener { @Override public void onMessage(Object message) { @@ -280,17 +280,17 @@ public RocketMQLocalTransactionState checkLocalTransaction(Message msg) { } @Configuration - static class ExtRocketMQTemplateConfig { + static class TestExtRocketMQTemplateConfig { @Bean public RocketMQTemplate extRocketMQTemplate() { - return new MyExtRocketMQTemplate(); + return new TestExtRocketMQTemplate(); } } @ExtRocketMQTemplateConfiguration(group = "test", nameServer = "127.0.0.1:9876") - static class MyExtRocketMQTemplate extends RocketMQTemplate { + static class TestExtRocketMQTemplate extends RocketMQTemplate { } From 24ac48d5994a6f2bed9d97ecff4f534a059416ca Mon Sep 17 00:00:00 2001 From: 16534 <16534@DESKTOP-136P21N> Date: Mon, 28 Oct 2019 16:42:39 +0800 Subject: [PATCH 7/7] fix:#103 support resolvePlaceholders for selectorExpression codestyle and update test class with actual meaning. --- .../spring/autoconfigure/RocketMQAutoConfigurationTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java index a865e3d4..9fa0fa41 100644 --- a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java +++ b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/autoconfigure/RocketMQAutoConfigurationTest.java @@ -170,7 +170,7 @@ public void testRocketMQTransactionListener() { "demo.rocketmq.transaction.producer.group=transaction-group1"). withUserConfiguration(TestTransactionListenerConfig.class). run((context) -> { - assertThat(context).hasSingleBean(MyRocketMQLocalTransactionListener.class); + assertThat(context).hasSingleBean(TestRocketMQLocalTransactionListener.class); }); @@ -259,13 +259,13 @@ public void onMessage(Object message) { static class TestTransactionListenerConfig { @Bean public Object rocketMQLocalTransactionListener() { - return new MyRocketMQLocalTransactionListener(); + return new TestRocketMQLocalTransactionListener(); } } @RocketMQTransactionListener(txProducerGroup = "${demo.rocketmq.transaction.producer.group}") - static class MyRocketMQLocalTransactionListener implements RocketMQLocalTransactionListener { + static class TestRocketMQLocalTransactionListener implements RocketMQLocalTransactionListener { @Override