diff --git a/Springboot-RabbitMQ/README.MD b/Springboot-RabbitMQ/README.MD
new file mode 100644
index 0000000000000000000000000000000000000000..5df32735348bf08d74f6d5a5d8b5217d8205e0ee
--- /dev/null
+++ b/Springboot-RabbitMQ/README.MD
@@ -0,0 +1 @@
+# 本案例实现SpringBoot整合RabbitMq
\ No newline at end of file
diff --git a/Springboot-RabbitMQ/pom.xml b/Springboot-RabbitMQ/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..539c82ec8b13acd1dba26ccb321d7138d81dee75
--- /dev/null
+++ b/Springboot-RabbitMQ/pom.xml
@@ -0,0 +1,58 @@
+
+ 4.0.0
+ com.button
+ Springboot-RabbitMQ
+ 0.0.1-SNAPSHOT
+ jar
+
+ SpringBoot整合Rabbitmq
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.1.RELEASE
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+ true
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ -Dfile.encoding=UTF-8
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/SpringBootRabbitMqApplication.java b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/SpringBootRabbitMqApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..465710ea479b910ba220e6592b92dd77b008a7e1
--- /dev/null
+++ b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/SpringBootRabbitMqApplication.java
@@ -0,0 +1,11 @@
+package com.button.boot.rabbitmq;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SpringBootRabbitMqApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SpringBootRabbitMqApplication.class, args);
+ }
+}
diff --git a/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/config/RabbitMqConfigure.java b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/config/RabbitMqConfigure.java
new file mode 100644
index 0000000000000000000000000000000000000000..0560ac0b658980eb0f412ce20a8db88a0e047fa0
--- /dev/null
+++ b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/config/RabbitMqConfigure.java
@@ -0,0 +1,77 @@
+package com.button.boot.rabbitmq.config;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.DirectExchange;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+
+@Configuration
+public class RabbitMqConfigure {
+
+ @Value("${spring.rabbitmq.host}")
+ private String host;
+
+ @Value("${spring.rabbitmq.port}")
+ private int port;
+
+ @Value("${spring.rabbitmq.username}")
+ private String username;
+
+ @Value("${spring.rabbitmq.password}")
+ private String password;
+
+ public static final String EXCHANGE_A = "exchange_A";
+ public static final String QUEUE_A = "QUEUE_A";
+ public static final String ROUTINGKEY_A = "routingKey_A";
+
+ @Bean
+ public ConnectionFactory connectionFactory() {
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
+ connectionFactory.setUsername(username);
+ connectionFactory.setPassword(password);
+ connectionFactory.setVirtualHost("/");
+ connectionFactory.setPublisherConfirms(true);
+ return connectionFactory;
+ }
+
+ @Bean
+ @Scope("prototype") // 必须是prototype类型
+ public RabbitTemplate rabbitTemplate() {
+ return new RabbitTemplate(connectionFactory());
+ }
+
+ /**
+ * 针对消费者配置 1. 设置交换机类型 2. 将队列绑定到交换机
+ *
+ * FanoutExchange: 将消息分发到所有的绑定队列,无routingkey的概念
+ * HeadersExchange :通过添加属性key-value匹配
+ * DirectExchange:按照routingkey分发到指定队列
+ * TopicExchange:多关键字匹配
+ */
+ @Bean
+ public DirectExchange defaultExchange() {
+ return new DirectExchange(EXCHANGE_A);
+ }
+
+ /**
+ * 获取队列A
+ *
+ * @return
+ */
+ @Bean
+ public Queue queueA() {
+ return new Queue(QUEUE_A, true); // 队列持久
+ }
+
+ @Bean
+ public Binding binding() {
+ return BindingBuilder.bind(queueA()).to(defaultExchange()).with(ROUTINGKEY_A);
+ }
+}
diff --git a/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/manager/RabbitMqProducer.java b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/manager/RabbitMqProducer.java
new file mode 100644
index 0000000000000000000000000000000000000000..d5f4e27a8fe74479e35978549e202be7b3014f1f
--- /dev/null
+++ b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/manager/RabbitMqProducer.java
@@ -0,0 +1,45 @@
+package com.button.boot.rabbitmq.manager;
+
+import java.util.UUID;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.amqp.rabbit.support.CorrelationData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.button.boot.rabbitmq.config.RabbitMqConfigure;
+
+@Component
+public class RabbitMqProducer implements RabbitTemplate.ConfirmCallback {
+ private final Logger logger = LoggerFactory.getLogger(RabbitMqProducer.class);
+ // 由于rabbitTemplate的scope属性设置为ConfigurableBeanFactory.SCOPE_PROTOTYPE,所以不能自动注入
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 构造方法注入rabbitTemplate
+ */
+ @Autowired
+ public void msgProducer(RabbitTemplate rabbitTemplate) {
+ this.rabbitTemplate = rabbitTemplate;
+ rabbitTemplate.setConfirmCallback(this); //rabbitTemplate如果为单例的话,那回调就是最后设置的内容
+ }
+
+ public void sendMsg(String content) {
+ CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
+ // 把消息放入ROUTINGKEY_A对应的队列当中去,对应的是队列A
+ rabbitTemplate.convertAndSend(RabbitMqConfigure.EXCHANGE_A, RabbitMqConfigure.ROUTINGKEY_A, content, correlationId);
+ }
+
+ @Override
+ public void confirm(CorrelationData correlationData, boolean ack, String cause) {
+ logger.info("消息回调id={}", correlationData);
+ if (ack) {
+ logger.info("消息成功消费");
+ } else {
+ logger.info("消息消费失败,cause={}", cause);
+ }
+ }
+
+}
diff --git a/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/manager/RabbitMqReceiver.java b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/manager/RabbitMqReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..e35283e0212b242f9f58717a086c5bc383763046
--- /dev/null
+++ b/Springboot-RabbitMQ/src/main/java/com/button/boot/rabbitmq/manager/RabbitMqReceiver.java
@@ -0,0 +1,20 @@
+package com.button.boot.rabbitmq.manager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+import com.button.boot.rabbitmq.config.RabbitMqConfigure;
+
+@Component
+@RabbitListener(queues = RabbitMqConfigure.QUEUE_A)
+public class RabbitMqReceiver {
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ @RabbitHandler
+ public void process(String content) {
+ logger.info("接收到QUEUE_A中的消息. content={}", content);
+ }
+}
diff --git a/Springboot-RabbitMQ/src/main/resources/application.yml b/Springboot-RabbitMQ/src/main/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bb88047accfdfa07587190af24e5e283732edd7a
--- /dev/null
+++ b/Springboot-RabbitMQ/src/main/resources/application.yml
@@ -0,0 +1,16 @@
+server:
+ servlet:
+ context-path: /rabbit
+ port: 8080
+ uri-encoding: utf-8
+
+logging:
+ file: logback.xml
+
+#对于rabbitMQ的支持
+spring:
+ rabbitmq:
+ host: ***.***.***.****
+ port: 5672
+ username: admin
+ password: *********
\ No newline at end of file
diff --git a/Springboot-RabbitMQ/src/main/resources/logback.xml b/Springboot-RabbitMQ/src/main/resources/logback.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a8edfbb6a700fb95e3bcfc484f18a0c11ab8b52
--- /dev/null
+++ b/Springboot-RabbitMQ/src/main/resources/logback.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n
+
+
+
+ ${LOG_HOME}/springboot_rabbitmq.log
+
+
+ ${LOG_HOME}/springboot_rabbitmq.log.%d{yyyy-MM-dd}.%i.log
+
+
+ 100MB
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Springboot-RabbitMQ/src/test/java/com/button/boot/rabbitmq/test/RabbitMqTest.java b/Springboot-RabbitMQ/src/test/java/com/button/boot/rabbitmq/test/RabbitMqTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..acc6901aa7b7d4062543ba6cf6f825a432971bc7
--- /dev/null
+++ b/Springboot-RabbitMQ/src/test/java/com/button/boot/rabbitmq/test/RabbitMqTest.java
@@ -0,0 +1,26 @@
+package com.button.boot.rabbitmq.test;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.button.boot.rabbitmq.manager.RabbitMqProducer;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class RabbitMqTest {
+ private static final Logger LOGGER = LoggerFactory.getLogger(RabbitMqTest.class);
+
+ @Autowired
+ private RabbitMqProducer rabbitMqProducer;
+ @Test
+ public void test1() {
+ LOGGER.info("开始发送消息.");
+ rabbitMqProducer.sendMsg("SpringBoot整合RabbitMq");
+ LOGGER.info("消息发送成功.");
+ }
+}