Spring Boot統合RabbiitMQ開発の実戦詳細


この文章は主に基本的な整合について述べている。まずコードをかけてください。高級な特性は何ですか?
ラビットMQの中のいくつかの用語
RabbiitMQ webコンソールを開くと、Exhangesがよく理解できないことが分かります。簡単に説明します。

スイッチ(Exchange)
交換器はルータのようです。まず交換器にメッセージを送ります。そしてスイッチはルートキーによってメッセージを対応の列に送ります。この概念を理解することが重要です。後のコードにはこの点が十分に反映されています。)
キュー(Que)
列がよく分かります。説明しなくてもいいです。
バインディング(Binding)
交換器はこのメッセージをどの列に送るかどうやって分かりますか?これはバインディングを使う必要があります。あるルートキーを使って、ある列をあるスイッチに結びつけます。そうすると、スイッチはルートキーによってこのメッセージをどの列に送るかを知ることができます。後ろのコードにはこの点がよく表れています)
Rabbiit MQ mavenへの加入依存

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
もう一つの依存性を追加します。

<dependency>
 <groupId>cn.hutool</groupId>
 <artifactId>hutool-all</artifactId>
 <version>4.0.2</version>
</dependency>
Rabbiit MQConfig.java配置

@Configuration
public class RabbitMQConfig {

 public final static String QUEUE_NAME = "spring-boot-queue";
 public final static String EXCHANGE_NAME = "spring-boot-exchange";
 public final static String ROUTING_KEY = "spring-boot-key";

 //     
 @Bean
 public Queue queue() {
 return new Queue(QUEUE_NAME);
 }

 //      topic       
 @Bean
 public TopicExchange exchange() {
 return new TopicExchange(EXCHANGE_NAME);
 }

 //      (routingKey)   (Queue)      (Exchange)
 @Bean
 public Binding binding(Queue queue, TopicExchange exchange) {
 return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
 }

 @Bean
 public ConnectionFactory connectionFactory() {
 CachingConnectionFactory connectionFactory = new CachingConnectionFactory("127.0.0.1", 5672);
 connectionFactory.setUsername("guest");
 connectionFactory.setPassword("guest");
 return connectionFactory;
 }

 @Bean
 public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
 return new RabbitTemplate(connectionFactory);
 }

}
生産者
rabbit TemplateのconvertAndSendメソッドを直接呼び出すといいです。下のコードからも分かるように、メッセージを直接列の中に送るのではなく、交換器に先に送って、スイッチはルートキーによって私達のメッセージを対応の列に配達します。

@RestController
public class ProducerController {

 @Autowired
 private RabbitTemplate rabbitTemplate;

 @GetMapping("/sendMessage")
 public Object sendMessage() {
 new Thread(() -> {
  for (int i = 0; i < 100; i++) {
  String value = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
  Console.log("send message {}", value);
  rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, value);
  }
 }).start();
 return "ok";
 }

}
消費者
消費者も簡単です。対応方法に@Rabbit Listenerのコメントを入れて、モニターが必要な列の名前を指定すればいいです。

@Component
public class Consumer {

 @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
 public void consumeMessage(String message) {
 Console.log("consume message {}", message);
 }
}
プロジェクトを実行
プロジェクトを実行してブラウザを開き、http://localhost:9999/sendMessageを入力します。コンソールでは生産者が絶えずメッセージを送るのを見ることができます。消費者は絶えず消費メッセージを送っています。

RabbiitMQ webコンソールを開くと、コードの中に先ほど配置されたスイッチとキュー、およびバインディング情報を見ることができます。

スイッチに入る詳細をクリックしてください。


おわりに
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。