アプリケーション ファイル
関連するスイッチとキューを使用する場合は、実装ではスイッチとキューを宣言します。対応する情報がない場合、起動プロジェクトは失敗します。したがって、springboot を使用して Rabbitmq を統合する場合、構成ファイルを使用してスイッチとキューを宣言し、この 2 つの間の関係をバインドできます。 Fanout モードは現在デモ中であるため、FanoutExchange を使用してスイッチを宣言し、他のモードでは対応する TopicExchange および DirectExchange を使用して宣言します。
@Configuration public class RabbitMQConfiguration { //声明fanout模式的交换机 @Bean public FanoutExchange fanoutExchange() { return new FanoutExchange("fanout_order_exchange", true, false); } //声明队列 @Bean public Queue smsQueue() { return new Queue("sms.fanout.queue", true); } @Bean public Queue emailQueue() { return new Queue("email.fanout.queue", true); } @Bean public Queue duanxinQueue() { return new Queue("duanxin.fanout.queue", true); } //绑定 @Bean public Binding smsBinding() { return BindingBuilder.bind(smsQueue()).to(fanoutExchange()); } @Bean public Binding emailBinding() { return BindingBuilder.bind(emailQueue()).to(fanoutExchange()); } @Bean public Binding duanxinBinding() { return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange()); } }
プロデューサー ビジネス コード
@Autowired private RabbitTemplate rabbitTemplate; public void makeOrder() { // 保存订单 String orderId = UUID.randomUUID().toString(); System.out.println("下单成功:" + orderId); // 通过MQ完成消息的分发 // 参数1:交换机 ;参数2:路由key/队列名;参数3:消息内容 String exchangeName = "fanout_order_exchange"; rabbitTemplate.convertAndSend(exchangeName, "", orderId); } }
コンシューマ エンジニアリングはプロデューサー エンジニアリングに似ています。最初に依存関係を導入し、次にアプリケーションに関連する変更を加える必要があります。ファイル構成を変更してコードの記述を開始します。コンシューマ プロジェクトでは、rabbitmq 設定ファイルを記述してスイッチとキューを宣言することもできます。コンシューマ側は最初に起動するプロジェクトとなるため、スイッチやキューが作成されていないとプロジェクトの起動に失敗するため、コンシューマ側で設定ファイルを記述することを推奨します。メッセージのリスニング
RabbitListener アノテーションを通じてメッセージ キューをリスニングします。コンポーネントアノテーションを通じて監視をスプリング管理に引き渡す必要があることに注意してください。そうしないと、サーバーからメッセージを正常に受信できません。ここでは、電子メール メッセージの監視を 1 つだけ指定します。上記のプロデューサーによって宣言された duanxin キューと SMS キューは、独自に作成できます。キュー名を変更するだけで済みます。 @Service public class OrderService {
@RabbitListener(queues = {"email.fanout.queue"}) @Component public class FanoutEmailService { @RabbitHandler public void receive(String message) { System.out.println("email fanout -----》接收到" + message); } }
Test
@SpringBootTest class SpringbootOrderRabbitmqProducerApplicationTests { @Autowired private OrderService orderService; @Test void contextLoads() { orderService.makeOrder(); } }
メッセージの送信後、コンシューマーがメッセージを正常に受け入れたことがコンソールでわかります。
#ダイレクト モード
プロデューサープロジェクトを作成する手順は上記と同じです。 設定ファイル設定は基本的に上記と同じですが、この部分はダイレクトモードをテストするため、DirectExchangeを使用してスイッチを作成する必要があります。このクラスのメソッド名は、Bean アノテーションを使用して Spring 管理に引き渡すため、上記の Rabbitmq 設定ファイルのメソッド名と同じにすることはできないことに注意してください。名前が同じである場合、プロジェクトの起動は失敗。@Configuration public class DirectRabbitMQConfiguration { //声明direct模式的交换机 @Bean public DirectExchange directExchange() { return new DirectExchange("direct_order_exchange", true, false); } //声明队列 @Bean public Queue smsDirectQueue() { return new Queue("sms.direct.queue", true); } @Bean public Queue emailDirectQueue() { return new Queue("email.direct.queue", true); } @Bean public Queue duanxinDirectQueue() { return new Queue("duanxin.direct.queue", true); } //绑定 @Bean public Binding smsDirectBinding() { return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms"); } @Bean public Binding emailDirectBinding() { return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email"); } @Bean public Binding duanxinDirectBinding() { return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin"); } }
@Service public class OrderService { @Autowired private RabbitTemplate rabbitTemplate; public void makeOrderDirect() { // 保存订单 String orderId = UUID.randomUUID().toString(); System.out.println("下单成功:" + orderId); String exchangeName = "direct_order_exchange"; rabbitTemplate.convertAndSend(exchangeName, "sms", orderId); rabbitTemplate.convertAndSend(exchangeName, "email", orderId); } }
@RabbitListener(queues = {"email.direct.queue"}) @Component public class DirectEmailService { @RabbitHandler public void receive(String message) { System.out.println("email direct -----》接收到" + message); } }
@Service public class OrderService { @Autowired private RabbitTemplate rabbitTemplate; public void makeOrderTopic() { // 保存订单 String orderId = UUID.randomUUID().toString(); System.out.println("下单成功:" + orderId); String exchangeName = "topic_order_exchange"; String routingKey = "com.email"; rabbitTemplate.convertAndSend(exchangeName, routingKey, orderId); } }
以上がSpringboot が RabbitMQ メッセージキューを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。