add spring-boot-integration example
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/72ddfe0e Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/72ddfe0e Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/72ddfe0e Branch: refs/heads/master Commit: 72ddfe0e18565c69bde6dbea3aab19a904b139c9 Parents: 94e34fe Author: Ricardo Zanini <ricardozan...@gmail.com> Authored: Sun Aug 12 18:16:10 2018 -0300 Committer: Michael Andre Pearce <michael.andre.pea...@me.com> Committed: Tue Aug 14 23:11:22 2018 +0100 ---------------------------------------------------------------------- examples/features/standard/pom.xml | 1 + .../standard/spring-boot-integration/README.md | 7 ++ .../standard/spring-boot-integration/pom.xml | 102 +++++++++++++++++++ .../jms/example/springboot/Application.java | 70 +++++++++++++ .../jms/example/springboot/ExampleListener.java | 29 ++++++ .../jms/example/springboot/MessageSender.java | 41 ++++++++ ...dditional-spring-configuration-metadata.json | 44 ++++++++ .../src/main/resources/application.properties | 23 +++++ .../src/main/resources/broker.xml | 42 ++++++++ .../src/main/resources/logback.xml | 38 +++++++ 10 files changed, 397 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/pom.xml ---------------------------------------------------------------------- diff --git a/examples/features/standard/pom.xml b/examples/features/standard/pom.xml index 0493457..6ede897 100644 --- a/examples/features/standard/pom.xml +++ b/examples/features/standard/pom.xml @@ -94,6 +94,7 @@ under the License. <module>shared-consumer</module> <module>slow-consumer</module> <module>spring-integration</module> + <module>spring-boot-integration</module> <module>ssl-enabled</module> <module>ssl-enabled-crl-mqtt</module> <module>ssl-enabled-dual-authentication</module> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/README.md ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/README.md b/examples/features/standard/spring-boot-integration/README.md new file mode 100644 index 0000000..075bbd0 --- /dev/null +++ b/examples/features/standard/spring-boot-integration/README.md @@ -0,0 +1,7 @@ +# ActiveMQ Artemis Spring Boot Example + +To run the example, simply type **mvn verify -Pexample** from this directory. + +This example shows how to setup and run an embedded broker within a Spring Boot Application relying on [AMQP 1.0 JMS Spring Boot project](https://github.com/amqphub/amqp-10-jms-spring-boot) for configuration. + + http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/pom.xml ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/pom.xml b/examples/features/standard/spring-boot-integration/pom.xml new file mode 100644 index 0000000..10d4d76 --- /dev/null +++ b/examples/features/standard/spring-boot-integration/pom.xml @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.activemq.examples.broker</groupId> + <artifactId>jms-examples</artifactId> + <version>2.7.0-SNAPSHOT</version> + </parent> + <artifactId>spring-boot-integration</artifactId> + <name>ActiveMQ Artemis JMS Spring Boot Integration Example</name> + + <properties> + <activemq.basedir>${project.basedir}/../../../..</activemq.basedir> + + <!-- AMQP Spring Starter --> + <amqp-10-jms-spring.version>2.0.1</amqp-10-jms-spring.version> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.activemq</groupId> + <artifactId>artemis-amqp-protocol</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.amqphub.spring</groupId> + <artifactId>amqp-10-jms-spring-boot-starter</artifactId> + <version>${amqp-10-jms-spring.version}</version> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <version>2.0.4.RELEASE</version> + </plugin> + </plugins> + </build> + <profiles> + <profile> + <id>example</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.activemq</groupId> + <artifactId>artemis-maven-plugin</artifactId> + <executions> + <execution> + <id>runClient</id> + <goals> + <goal>runClient</goal> + </goals> + <configuration> + <clientClass>org.apache.activemq.artemis.jms.example.springboot.Application</clientClass> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>org.apache.activemq.examples.broker</groupId> + <artifactId>spring-boot-integration</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>release</id> + <build> + <plugins> + <plugin> + <groupId>com.vladsch.flexmark</groupId> + <artifactId>markdown-page-generator-plugin</artifactId> + </plugin> + </plugins> + </build> + </profile> + </profiles> +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/Application.java ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/Application.java b/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/Application.java new file mode 100644 index 0000000..a42c6ce --- /dev/null +++ b/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/Application.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.activemq.artemis.jms.example.springboot; + +import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration; +import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; +import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager; +import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.jms.annotation.EnableJms; + +/** + * @see <a href="https://spring.io/guides/gs/messaging-jms/">Spring JMS Messaging Guide</a> + */ +@SpringBootApplication +@EnableJms +public class Application { + public Application() { + + } + + public static void main(String[] args) throws InterruptedException { + final ConfigurableApplicationContext context = SpringApplication.run(Application.class); + System.out.println("********************* Sending message..."); + MessageSender sender = context.getBean(MessageSender.class); + sender.send("Hello Artemis!"); + Thread.sleep(1000); + context.close(); + } + + @Bean + public ActiveMQJAASSecurityManager securityManager(@Value("${amq.broker.user}") String user, + @Value("${amq.broker.password}") String password, + @Value("${amq.broker.role}") String role) { + final SecurityConfiguration configuration = new SecurityConfiguration(); + final ActiveMQJAASSecurityManager securityManager = + new ActiveMQJAASSecurityManager(InVMLoginModule.class.getName(), configuration); + configuration.addUser(user, password); + configuration.addRole(user, role); + configuration.setDefaultUser(user); + + return securityManager; + } + + @Bean(initMethod = "start", destroyMethod = "stop") + public EmbeddedActiveMQ embeddedActiveMQ(ActiveMQJAASSecurityManager securityManager) { + final EmbeddedActiveMQ embeddedActiveMQ = new EmbeddedActiveMQ(); + embeddedActiveMQ.setSecurityManager(securityManager); + return embeddedActiveMQ; + } + +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/ExampleListener.java ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/ExampleListener.java b/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/ExampleListener.java new file mode 100644 index 0000000..82bdc3e --- /dev/null +++ b/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/ExampleListener.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.activemq.artemis.jms.example.springboot; + +import org.springframework.jms.annotation.JmsListener; +import org.springframework.stereotype.Component; + +@Component +public class ExampleListener { + + @JmsListener(destination = "${amq.queue}") + public void receiveMessage(String message) { + System.out.println("*********************** MESSAGE RECEIVED: " + message); + } +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/MessageSender.java ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/MessageSender.java b/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/MessageSender.java new file mode 100644 index 0000000..70f1124 --- /dev/null +++ b/examples/features/standard/spring-boot-integration/src/main/java/org/apache/activemq/artemis/jms/example/springboot/MessageSender.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.activemq.artemis.jms.example.springboot; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jms.core.JmsTemplate; +import org.springframework.stereotype.Component; + +@Component +public class MessageSender { + + @Autowired + private JmsTemplate jmsTemplate; + + @Value("${amq.queue}") + private String queue; + + public MessageSender() { + + } + + public void send(String message) { + jmsTemplate.convertAndSend(queue, message); + } + +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/src/main/resources/META-INF/additional-spring-configuration-metadata.json ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/examples/features/standard/spring-boot-integration/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000..fbe5563 --- /dev/null +++ b/examples/features/standard/spring-boot-integration/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,44 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +{"properties": [ + { + "name": "amq.queue", + "type": "java.lang.String", + "description": "A description for 'amq.queue'" + }, + { + "name": "amq.broker.password", + "type": "java.lang.String", + "description": "A description for 'amq.broker.password'" + }, + { + "name": "amq.broker.user", + "type": "java.lang.String", + "description": "A description for 'amq.broker.user'" + }, + { + "name": "amq.broker.user", + "type": "java.lang.String", + "description": "A description for 'amq.broker.user'" + }, + { + "name": "amq.broker.role", + "type": "java.lang.String", + "description": "A description for 'amq.broker.role'" + } +]} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/src/main/resources/application.properties ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/src/main/resources/application.properties b/examples/features/standard/spring-boot-integration/src/main/resources/application.properties new file mode 100644 index 0000000..14f0c2e --- /dev/null +++ b/examples/features/standard/spring-boot-integration/src/main/resources/application.properties @@ -0,0 +1,23 @@ +## --------------------------------------------------------------------------- +## Licensed to the Apache Software Foundation (ASF) under one or more +## contributor license agreements. See the NOTICE file distributed with +## this work for additional information regarding copyright ownership. +## The ASF licenses this file to You under the Apache License, Version 2.0 +## (the "License"); you may not use this file except in compliance with +## the License. You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## --------------------------------------------------------------------------- +amqphub.amqp10jms.remote-url=amqp://localhost:61616 +amqphub.amqp10jms.username=guest +amqphub.amqp10jms.password=guest +amq.broker.password=guest +amq.broker.user=guest +amq.broker.role=guest +amq.queue=exampleQueue \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/src/main/resources/broker.xml ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/src/main/resources/broker.xml b/examples/features/standard/spring-boot-integration/src/main/resources/broker.xml new file mode 100644 index 0000000..099363e --- /dev/null +++ b/examples/features/standard/spring-boot-integration/src/main/resources/broker.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"> + <core xmlns="urn:activemq:core"> + + <persistence-enabled>false</persistence-enabled> + + <acceptors> + <acceptor name="netty">tcp://0.0.0.0:61616?protocols=AMQP,CORE</acceptor> + </acceptors> + + <security-settings> + <security-setting match="#"> + <permission roles="guest" type="createAddress"/> + <permission roles="guest" type="deleteAddress"/> + <permission roles="guest" type="createDurableQueue"/> + <permission roles="guest" type="deleteDurableQueue"/> + <permission roles="guest" type="createNonDurableQueue"/> + <permission roles="guest" type="deleteNonDurableQueue"/> + <permission roles="guest" type="consume"/> + <permission roles="guest" type="send"/> + </security-setting> + </security-settings> + </core> +</configuration> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/72ddfe0e/examples/features/standard/spring-boot-integration/src/main/resources/logback.xml ---------------------------------------------------------------------- diff --git a/examples/features/standard/spring-boot-integration/src/main/resources/logback.xml b/examples/features/standard/spring-boot-integration/src/main/resources/logback.xml new file mode 100644 index 0000000..2f867cd --- /dev/null +++ b/examples/features/standard/spring-boot-integration/src/main/resources/logback.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<configuration debug="false"> + <appender name="STDOUT" + class="ch.qos.logback.core.ConsoleAppender"> + <layout class="ch.qos.logback.classic.PatternLayout"> + <Pattern> + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + </Pattern> + </layout> + </appender> + + <logger name="org.springframework" level="INFO"> + </logger> + + + <root level="INFO"> + <appender-ref ref="STDOUT" /> + </root> + +</configuration>