• RMQ Topic


    原创转载请注明出处: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}")
    28     private 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

  • 相关阅读:
    【SQLSERVER】动态游标的实现
    【Oracle】动态游标的实现
    【SQLSERVER】拷贝表数据
    LeetCode: Count and Say
    LeetCode: Construct Binary Tree from Preorder and Inorder Traversa
    LeetCode: Combinations
    LeetCode: Convert Sorted List to Binary Search Tree
    LeetCode: Decode Ways
    LeetCode: Combination Sum II
    LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/agilestyle/p/11794927.html
Copyright © 2020-2023  润新知