Vous pouvez choisir d'ajouter des dépendances directement lors de la création du projet.
Étant donné que Rabbitmq a une adresse par défaut et des informations utilisateur, il n'est pas nécessaire de le configurer s'il s'agit d'un RabbitMQ local.
Fichier de configuration RabbitMQ :
Lors de l'utilisation des commutateurs et des files d'attente associés, nous devons déclarer les commutateurs et les files d'attente. S'il n'y a pas d'informations correspondantes, le projet de démarrage échouera. Par conséquent, lorsque nous utilisons Springboot pour intégrer Rabbitmq, nous pouvons utiliser le fichier de configuration pour déclarer le commutateur et la file d'attente et lier la relation entre les deux. Étant donné que le mode Fanout est actuellement en cours de démonstration, FanoutExchange est utilisé pour déclarer le commutateur, et d'autres modes utilisent les TopicExchange et DirectExchange correspondants pour déclarer.
@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()); } }
Cette partie du code distribue simplement des messages en appelant RabbitTemplate. @Service public class OrderService {
@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); } }
Consumer :
L'ingénierie du consommateur est similaire à l'ingénierie du producteur. Nous devons d'abord introduire des dépendances, puis effectuer les configurations pertinentes dans le fichier d'application pour commencer à écrire du code. Dans le projet consommateur, nous pouvons également écrire des fichiers de configuration Rabbitmq pour déclarer les commutateurs et les files d'attente. Il est recommandé d'écrire le fichier de configuration côté consommateur, car le côté consommateur est le premier projet à démarrer. Si le commutateur et la file d'attente ne sont pas créés, le démarrage du projet échouera. Écoute des messages
Nous écoutons la file d'attente des messages via l'annotation RabbitListener. Il convient de noter que nous devons confier la surveillance à la gestion de Spring via l'annotation des composants, sinon nous ne pouvons pas recevoir normalement les messages du serveur. Une seule surveillance des e-mails est donnée ici. Les files d'attente duanxin et SMS déclarées par le producteur ci-dessus peuvent être créées par lui-même. Il vous suffit de modifier le nom de la file d'attente. @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); } }
Démarrez d'abord le projet consommateur, puis créez une classe de test dans le projet producteur pour envoyer des messages.
@SpringBootTest class SpringbootOrderRabbitmqProducerApplicationTests { @Autowired private OrderService orderService; @Test void contextLoads() { orderService.makeOrder(); } }
Après l'envoi du message, nous pouvons constater dans la console que le consommateur a accepté le message avec succès.
Producteur
Les étapes pour créer un projet sont les mêmes que ci-dessus.
Fichier de configuration
La configuration est fondamentalement la même que ci-dessus Puisque cette partie teste le mode direct, vous devez utiliser DirectExchange pour créer le commutateur. Il convient de noter que le nom de la méthode dans cette classe ne peut pas être le même que le nom de la méthode dans le fichier de configuration Rabbitmq ci-dessus, car nous utilisons des annotations de bean pour le transmettre à Spring Management. Si les noms sont les mêmes, le démarrage du projet le fera. échouer.
@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); } }
La même chose que ci-dessus, faites simplement attention au nom de la file d'attente.
@RabbitListener(queues = {"email.direct.queue"}) @Component public class DirectEmailService { @RabbitHandler public void receive(String message) { System.out.println("email direct -----》接收到" + message); } }
Les modes ci-dessus déclarent tous la relation entre les commutateurs, les files d'attente et les liaisons via des fichiers de configuration. En fait, nous pouvons également déclarer des commutateurs et des annotations via des annotations.
Puisqu'il est déclaré à l'aide d'annotations, nous n'avons pas besoin de créer de fichier de configuration et pouvons écrire directement du code métier. Lors des tests, il nous suffit de modifier le nom de l'itinéraire. Pour plus de détails sur la façon de le modifier, veuillez consulter le lien au début de l'article pour voir comment chaque mode est utilisé.
@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); } }
Le code est fondamentalement le même que ci-dessus, la différence est que nous lions directement la file d'attente et basculons dans l'annotation RabbitListener. Il convient de noter que des chaînes sont utilisées dans chaque paramètre. La valeur correspond à la file d'attente et les paramètres correspondants sont le nom de la file d'attente, la persistance et la suppression automatique. Pour le switch correspondant à l'échange, les paramètres correspondants sont le nom du switch et le type du switch. La clé correspond au nom de l'itinéraire.
@RabbitListener(bindings = @QueueBinding( value = @Queue(value = "email.topic.queue",durable = "true",autoDelete = "false"), exchange = @Exchange(value = "topic_order_exchange",type = ExchangeTypes.TOPIC), key = "*.email.#" )) @Component public class TopicEmailService { @RabbitHandler public void receive(String message) { System.out.println("email topic -----》接收到" + message); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!