RMQ Topic

Original please indicate the source: https://www.cnblogs.com/agilestyle/p/11794927.html

 

RMQ Topic

 

Project Directory

 

Maven Dependency

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>org.fool.rmq</groupId>
 8     <artifactId>rmq</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>2.2.0.RELEASE</version>
15     </parent>
16 
17     <dependencies>
18         <dependency>
19             <groupId>org.springframework.boot</groupId>
20             <artifactId>spring-boot-starter-amqp</artifactId>
21         </dependency>
22 
23         <dependency>
24             <groupId>org.springframework.boot</groupId>
25             <artifactId>spring-boot-starter-web</artifactId>
26         </dependency>
27 
28         <dependency>
29             <groupId>org.springframework.boot</groupId>
30             <artifactId>spring-boot-starter-test</artifactId>
31             <scope>test</scope>
32         </dependency>
33     </dependencies>
34 
35     <build>
36         <plugins>
37             <plugin>
38                 <groupId>org.springframework.boot</groupId>
39                 <artifactId>spring-boot-maven-plugin</artifactId>
40             </plugin>
41         </plugins>
42     </build>
43 </project>
View Code

 

application.properties

 1 spring.application.name=rmq
 2 server.port=8888
 3 
 4 spring.rabbitmq.host=localhost
 5 spring.rabbitmq.port=5672
 6 spring.rabbitmq.username=admin
 7 spring.rabbitmq.password=admin
 8 
 9 #direct part start
10 rmq.config.exchange=log.direct
11 rmq.config.queue.info=log.info
12 rmq.config.queue.info.routing.key=log.info.routing.key
13 rmq.config.queue.error=log.error
14 rmq.config.queue.error.routing.key=log.error.routing.key
15 #direct part end
16 
17 #topic part start
18 rmq.config.exchange.topic=log.topic
19 rmq.config.queue.topic.info=log.topic.info
20 rmq.config.queue.topic.error=log.topic.error
21 rmq.config.queue.topic.all=log.topic.all
22 
23 rmq.config.queue.user.info.routing.key=user.log.info
24 rmq.config.queue.user.debug.routing.key=user.log.debug
25 rmq.config.queue.user.warn.routing.key=user.log.warn
26 rmq.config.queue.user.error.routing.key=user.log.error
27 
28 rmq.config.queue.product.info.routing.key=product.log.info
29 rmq.config.queue.product.debug.routing.key=product.log.debug
30 rmq.config.queue.product.warn.routing.key=product.log.warn
31 rmq.config.queue.product.error.routing.key=product.log.error
32 
33 rmq.config.queue.order.info.routing.key=order.log.info
34 rmq.config.queue.order.debug.routing.key=order.log.debug
35 rmq.config.queue.order.warn.routing.key=order.log.warn
36 rmq.config.queue.order.error.routing.key=order.log.error
37 #topic part end

 

Source Code

Application.java

 1 package org.fool.rmq;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 
 6 @SpringBootApplication
 7 public class Application {
 8     public static void main(String[] args) {
 9         SpringApplication.run(Application.class, args);
10     }
11 }

 

RmqConfig.java

 1 package org.fool.rmq.config;
 2 
 3 import org.springframework.amqp.core.Queue;
 4 import org.springframework.context.annotation.Bean;
 5 import org.springframework.context.annotation.Configuration;
 6 
 7 @Configuration
 8 public class RmqConfig {
 9 
10     @Bean
11     public Queue queue() {
12         return new Queue("hello-rmq");
13     }
14 }

 

UserProducer.java

 1 package org.fool.rmq.topic;
 2 
 3 import org.springframework.amqp.core.AmqpTemplate;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.beans.factory.annotation.Value;
 6 import org.springframework.stereotype.Component;
 7 
 8 import java.util.Date;
 9 
10 @Component
11 public class UserProducer {
12     @Autowired
13     private AmqpTemplate rmqTemplate;
14 
15     @Value("${rmq.config.exchange.topic}")
16     private String exchange;
17 
18     @Value("${rmq.config.queue.user.info.routing.key}")
19     private String infoRoutingKey;
20 
21     @Value("${rmq.config.queue.user.debug.routing.key}")
22     private String debugRoutingKey;
23 
24     @Value("${rmq.config.queue.user.warn.routing.key}")
25     private String warnRoutingKey;
26 
27     @Value("${rmq.config.queue.user.error.routing.key}")
28     private String errorRoutingKey;
29 
30     public void send() {
31         String message = "Hello User";
32         rmqTemplate.convertAndSend(exchange, infoRoutingKey, message + " info");
33         rmqTemplate.convertAndSend(exchange, debugRoutingKey, message + " debug");
34         rmqTemplate.convertAndSend(exchange, warnRoutingKey, message+ " warn");
35         rmqTemplate.convertAndSend(exchange, errorRoutingKey, message + " error");
36     }
37 }

 

ProductProducer.java

 1 package org.fool.rmq.topic;
 2 
 3 import org.springframework.amqp.core.AmqpTemplate;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.beans.factory.annotation.Value;
 6 import org.springframework.stereotype.Component;
 7 
 8 import java.util.Date;
 9 
10 @Component
11 public class ProductProducer {
12     @Autowired
13     private AmqpTemplate rmqTemplate;
14 
15     @Value("${rmq.config.exchange.topic}")
16     private String exchange;
17 
18     @Value("${rmq.config.queue.product.info.routing.key}")
19     private String infoRoutingKey;
20 
21     @Value("${rmq.config.queue.product.debug.routing.key}")
22     private String debugRoutingKey;
23 
24     @Value("${rmq.config.queue.product.warn.routing.key}")
25     private String warnRoutingKey;
26 
27     @Value("${rmq.config.queue.product.error.routing.key}"private28)
      String errorRoutingKey;
29 
30     public void send() {
31         String message = "Hello Product";
32         rmqTemplate.convertAndSend(exchange, infoRoutingKey, message + " info");
33         rmqTemplate.convertAndSend(exchange, debugRoutingKey, message + " debug");
34         rmqTemplate.convertAndSend(exchange, warnRoutingKey, message + " warn");
35         rmqTemplate.convertAndSend(exchange, errorRoutingKey, message + " error");
36     }
37 }

 

OrderProducer.java

 1 package org.fool.rmq.topic;
 2 
 3 import org.springframework.amqp.core.AmqpTemplate;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.beans.factory.annotation.Value;
 6 import org.springframework.stereotype.Component;
 7 
 8 import java.util.Date;
 9 
10 @Component
11 public class OrderProducer {
12     @Autowired
13     private AmqpTemplate rmqTemplate;
14 
15     @Value("${rmq.config.exchange.topic}")
16     private String exchange;
17 
18     @Value("${rmq.config.queue.order.info.routing.key}")
19     private String infoRoutingKey;
20 
21     @Value("${rmq.config.queue.order.debug.routing.key}")
22     private String debugRoutingKey;
23 
24     @Value("${rmq.config.queue.order.warn.routing.key}")
25     private String warnRoutingKey;
26 
27     @Value("${rmq.config.queue.order.error.routing.key}")
28     private String errorRoutingKey;
29 
30     public void send() {
31         String message = "Hello Order";
32         rmqTemplate.convertAndSend(exchange, infoRoutingKey, message + " info");
33         rmqTemplate.convertAndSend(exchange, debugRoutingKey, message + " debug");
34         rmqTemplate.convertAndSend(exchange, warnRoutingKey, message + " warn");
35         rmqTemplate.convertAndSend(exchange, errorRoutingKey, message + " error");
36     }
37 }

 

TopicLogInfoConsumer.java

 1 package org.fool.rmq.topic;
 2 
 3 import org.springframework.amqp.core.ExchangeTypes;
 4 import org.springframework.amqp.rabbit.annotation.Exchange;
 5 import org.springframework.amqp.rabbit.annotation.Queue;
 6 import org.springframework.amqp.rabbit.annotation.QueueBinding;
 7 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 8 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 9 import org.springframework.stereotype.Component;
10 
11 @Component
12 @RabbitListener(bindings = @QueueBinding(
13         value = @Queue(value = "${rmq.config.queue.topic.info}", autoDelete = "true"),
14         exchange = @Exchange(value = "${rmq.config.exchange.topic}", type = ExchangeTypes.TOPIC),
15         key = "*.log.info"
16 ))
17 public class TopicLogInfoConsumer {
18     @RabbitHandler
19     public void handle(String message) {
20         System.out.println("consume info: " + message);
21     }
22 }

 

TopicLogErrorConsumer.java

 1 package org.fool.rmq.topic;
 2 
 3 import org.springframework.amqp.core.ExchangeTypes;
 4 import org.springframework.amqp.rabbit.annotation.Exchange;
 5 import org.springframework.amqp.rabbit.annotation.Queue;
 6 import org.springframework.amqp.rabbit.annotation.QueueBinding;
 7 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 8 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 9 import org.springframework.stereotype.Component;
10 
11 @Component
12 @RabbitListener(bindings = @QueueBinding(
13         value = @Queue(value = "${rmq.config.queue.topic.error}", autoDelete = "true"),
14         exchange = @Exchange(value = "${rmq.config.exchange.topic}", type = ExchangeTypes.TOPIC),
15         key = "*.log.error"
16 ))
17 public class TopicLogErrorConsumer {
18     @RabbitHandler
19     public void handle(String message) {
20         System.out.println("consume error: " + message);
21     }
22 }

 

TopicLogAllConsumer.java

 1 package org.fool.rmq.topic;
 2 
 3 import org.springframework.amqp.core.ExchangeTypes;
 4 import org.springframework.amqp.rabbit.annotation.Exchange;
 5 import org.springframework.amqp.rabbit.annotation.Queue;
 6 import org.springframework.amqp.rabbit.annotation.QueueBinding;
 7 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 8 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 9 import org.springframework.stereotype.Component;
10 
11 @Component
12 @RabbitListener(bindings = @QueueBinding(
13         value = @Queue(value = "${rmq.config.queue.topic.all}", autoDelete = "true"),
14         exchange = @Exchange(value = "${rmq.config.exchange.topic}", type = ExchangeTypes.TOPIC),
15         key = "*.log.*"
16 ))
17 public class TopicLogAllConsumer {
18     @RabbitHandler
19     public void handle(String message) {
20         System.out.println("consume all: " + message);
21     }
22 }

 

ApplicationTest.java

 1 package org.fool.rmq.test;
 2 
 3 import org.fool.rmq.Application;
 4 import org.fool.rmq.direct.LogProducer;
 5 import org.fool.rmq.producer.Producer;
 6 import org.fool.rmq.topic.OrderProducer;
 7 import org.fool.rmq.topic.ProductProducer;
 8 import org.fool.rmq.topic.UserProducer;
 9 import org.junit.Test;
10 import org.junit.runner.RunWith;
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.boot.test.context.SpringBootTest;
13 import org.springframework.test.context.junit4.SpringRunner;
14 
15 @RunWith(SpringRunner.class)
16 @SpringBootTest(classes = Application.class)
17 public class ApplicationTest {
18 
19     @Autowired
20     private Producer producer;
21 
22     @Autowired
23     private LogProducer logProducer;
24 
25     @Autowired
26     private UserProducer userProducer;
27 
28     @Autowired
29     private ProductProducer productProducer;
30 
31     @Autowired
32     private OrderProducer orderProducer;
33 
34     @Test
35     public void test() {
36         producer.send();
37     }
38 
39     @Test
40     public void testDirect() {
41         logProducer.send();
42     }
43 
44     @Test
45     public void testTopic() {
46         userProducer.send();
47         productProducer.send();
48         orderProducer.send();
49     }
50 }

 

Console Output

 

RMQ Management

 

Guess you like

Origin www.cnblogs.com/agilestyle/p/11794927.html