Spring Boot統合RabbiitMQ開発の実戦詳細
この文章は主に基本的な整合について述べている。まずコードをかけてください。高級な特性は何ですか?
ラビットMQの中のいくつかの用語
RabbiitMQ webコンソールを開くと、Exhangesがよく理解できないことが分かります。簡単に説明します。
スイッチ(Exchange)
交換器はルータのようです。まず交換器にメッセージを送ります。そしてスイッチはルートキーによってメッセージを対応の列に送ります。この概念を理解することが重要です。後のコードにはこの点が十分に反映されています。)
キュー(Que)
列がよく分かります。説明しなくてもいいです。
バインディング(Binding)
交換器はこのメッセージをどの列に送るかどうやって分かりますか?これはバインディングを使う必要があります。あるルートキーを使って、ある列をあるスイッチに結びつけます。そうすると、スイッチはルートキーによってこのメッセージをどの列に送るかを知ることができます。後ろのコードにはこの点がよく表れています)
Rabbiit MQ mavenへの加入依存
rabbit TemplateのconvertAndSendメソッドを直接呼び出すといいです。下のコードからも分かるように、メッセージを直接列の中に送るのではなく、交換器に先に送って、スイッチはルートキーによって私達のメッセージを対応の列に配達します。
消費者も簡単です。対応方法に@Rabbit Listenerのコメントを入れて、モニターが必要な列の名前を指定すればいいです。
プロジェクトを実行してブラウザを開き、
RabbiitMQ webコンソールを開くと、コードの中に先ほど配置されたスイッチとキュー、およびバインディング情報を見ることができます。
スイッチに入る詳細をクリックしてください。
おわりに
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
ラビット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コンソールを開くと、コードの中に先ほど配置されたスイッチとキュー、およびバインディング情報を見ることができます。
スイッチに入る詳細をクリックしてください。
おわりに
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。