diff --git a/lab-39/lab-39-kafka/pom.xml b/lab-39/lab-39-kafka/pom.xml index 6b0f942d..f4c57120 100644 --- a/lab-39/lab-39-kafka/pom.xml +++ b/lab-39/lab-39-kafka/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.2.RELEASE + 2.1.11.RELEASE 4.0.0 @@ -18,7 +18,7 @@ org.springframework.kafka spring-kafka - 2.3.3.RELEASE + 2.2.11.RELEASE diff --git a/lab-39/lab-39-rabbitmq-demo/pom.xml b/lab-39/lab-39-rabbitmq-demo/pom.xml new file mode 100644 index 00000000..814b8bf5 --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/pom.xml @@ -0,0 +1,29 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.1.RELEASE + + + 4.0.0 + + lab-39-rabbitmq-demo + + + + + org.springframework.boot + spring-boot-starter-amqp + + + + + org.springframework.boot + spring-boot-starter-web + + + + diff --git a/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/RabbitMQApplication.java b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/RabbitMQApplication.java new file mode 100644 index 00000000..0555ea13 --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/RabbitMQApplication.java @@ -0,0 +1,13 @@ +package cn.iocoder.springboot.lab39.skywalkingdemo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class RabbitMQApplication { + + public static void main(String[] args) { + SpringApplication.run(RabbitMQApplication.class, args); + } + +} diff --git a/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/config/RabbitConfig.java b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/config/RabbitConfig.java new file mode 100644 index 00000000..195af5c1 --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/config/RabbitConfig.java @@ -0,0 +1,40 @@ +package cn.iocoder.springboot.lab39.skywalkingdemo.config; + +import cn.iocoder.springboot.lab39.skywalkingdemo.message.DemoMessage; +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.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitConfig { + + // 创建 Queue + @Bean + public Queue demoQueue() { + return new Queue(DemoMessage.QUEUE, // Queue 名字 + true, // durable: 是否持久化 + false, // exclusive: 是否排它 + false); // autoDelete: 是否自动删除 + } + + // 创建 Direct Exchange + @Bean + public DirectExchange demoExchange() { + return new DirectExchange(DemoMessage.EXCHANGE, + true, // durable: 是否持久化 + false); // exclusive: 是否排它 + } + + // 创建 Binding + // Exchange:DemoMessage.EXCHANGE + // Routing key:DemoMessage.ROUTING_KEY + // Queue:DemoMessage.QUEUE + @Bean + public Binding demoBinding() { + return BindingBuilder.bind(demoQueue()).to(demoExchange()).with(DemoMessage.ROUTING_KEY); + } + +} diff --git a/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/consumer/DemoConsumer.java b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/consumer/DemoConsumer.java new file mode 100644 index 00000000..a16ee721 --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/consumer/DemoConsumer.java @@ -0,0 +1,21 @@ +package cn.iocoder.springboot.lab39.skywalkingdemo.consumer; + +import cn.iocoder.springboot.lab39.skywalkingdemo.message.DemoMessage; +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; + +@Component +@RabbitListener(queues = DemoMessage.QUEUE) +public class DemoConsumer { + + private Logger logger = LoggerFactory.getLogger(getClass()); + + @RabbitHandler + public void onMessage(DemoMessage message) { + logger.info("[onMessage][线程编号:{} 消息内容:{}]", Thread.currentThread().getId(), message); + } + +} diff --git a/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/controller/DemoController.java b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/controller/DemoController.java new file mode 100644 index 00000000..cc341bd7 --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/controller/DemoController.java @@ -0,0 +1,26 @@ +package cn.iocoder.springboot.lab39.skywalkingdemo.controller; + +import cn.iocoder.springboot.lab39.skywalkingdemo.producer.DemoProducer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/demo") +public class DemoController { + + @Autowired + private DemoProducer producer; + + @GetMapping("/rabbitmq") + public String echo() { + this.sendMessage(1); + return "rabbitmq"; + } + + public void sendMessage(Integer id) { + producer.syncSend(id); + } + +} diff --git a/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/message/DemoMessage.java b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/message/DemoMessage.java new file mode 100644 index 00000000..8714ad9e --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/message/DemoMessage.java @@ -0,0 +1,34 @@ +package cn.iocoder.springboot.lab39.skywalkingdemo.message; + +import java.io.Serializable; + +public class DemoMessage implements Serializable { + + public static final String QUEUE = "QUEUE_DEMO_"; + + public static final String EXCHANGE = "EXCHANGE_DEMO_"; + + public static final String ROUTING_KEY = "ROUTING_KEY_"; + + /** + * 编号 + */ + private Integer id; + + public DemoMessage setId(Integer id) { + this.id = id; + return this; + } + + public Integer getId() { + return id; + } + + @Override + public String toString() { + return "DemoMessage{" + + "id=" + id + + '}'; + } + +} diff --git a/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/producer/DemoProducer.java b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/producer/DemoProducer.java new file mode 100644 index 00000000..35d206cf --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/src/main/java/cn/iocoder/springboot/lab39/skywalkingdemo/producer/DemoProducer.java @@ -0,0 +1,22 @@ +package cn.iocoder.springboot.lab39.skywalkingdemo.producer; + +import cn.iocoder.springboot.lab39.skywalkingdemo.message.DemoMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class DemoProducer { + + @Autowired + private RabbitTemplate rabbitTemplate; + + public void syncSend(Integer id) { + // 创建 DemoMessage 消息 + DemoMessage message = new DemoMessage(); + message.setId(id); + // 同步发送消息 + rabbitTemplate.convertAndSend(DemoMessage.EXCHANGE, DemoMessage.ROUTING_KEY, message); + } + +} diff --git a/lab-39/lab-39-rabbitmq-demo/src/main/resources/application.yaml b/lab-39/lab-39-rabbitmq-demo/src/main/resources/application.yaml new file mode 100644 index 00000000..208ac632 --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/src/main/resources/application.yaml @@ -0,0 +1,10 @@ +server: + port: 8079 + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 diff --git a/lab-39/lab-39-rabbitmq-demo/target/classes/application.yaml b/lab-39/lab-39-rabbitmq-demo/target/classes/application.yaml new file mode 100644 index 00000000..208ac632 --- /dev/null +++ b/lab-39/lab-39-rabbitmq-demo/target/classes/application.yaml @@ -0,0 +1,10 @@ +server: + port: 8079 + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 diff --git a/lab-39/pom.xml b/lab-39/pom.xml index a403a343..d474f837 100644 --- a/lab-39/pom.xml +++ b/lab-39/pom.xml @@ -21,6 +21,7 @@ lab-39-elasticsearch-jest lab-39-rocketmq lab-39-kafka + lab-39-rabbitmq-demo