发布于2021-05-29 20:54 阅读(536) 评论(0) 点赞(1) 收藏(4)
从网上学习Rabbit Mq中间件
写出如下建立Demo过程
用Docker 命令下载Rabbit Mq
docker run -di --name myrabitt -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
测试Rabbit Mq是否安装成功,访问
localhost:15672
账号密码都是admin
能够登录成功,证明安装完成
新建Producer SpringBoot程序
新建service文件夹,放入以下orderService类
package com.robert.rabbitmq.producer.service;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
@Service
public class orderService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void makeOrder(String userID, String produceId, int num) {
String orderId = UUID.randomUUID().toString();
System.out.print("订单生成成功" + orderId);
String exchangeName = "direct_order_exchange";
String sMSRoutingKey = "sms";
String emailRoutingKey = "email";
rabbitTemplate.convertAndSend(exchangeName, sMSRoutingKey, orderId);
rabbitTemplate.convertAndSend(exchangeName, emailRoutingKey, orderId);
}
}
新建config文件夹,放入DirectRabbitConfiguration类
package com.robert.rabbitmq.producer.config;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DirectRabbitConfiguration {
@Bean
public DirectExchange directExchange() {
return new DirectExchange("direct_order_exchange", true, false);
}
@Bean
public Queue smsQueue() {
return new Queue("sms.direct.queue", true);
}
@Bean
public Queue messageQueue() {
return new Queue("message.direct.queue", true);
}
@Bean
public Queue emailQueue() {
return new Queue("email.direct.queue", true);
}
@Bean
public Binding smsBinding() {
return BindingBuilder.bind(smsQueue()).to(directExchange()).with("sms");
}
@Bean
public Binding messageBinding() {
return BindingBuilder.bind(messageQueue()).to(directExchange()).with("message");
}
@Bean
public Binding emailBinding() {
return BindingBuilder.bind(emailQueue()).to(directExchange()).with("email");
}
}
修改自动生成的测试类,改成如下
@SpringBootTest
class SpringbootOrderRabbitmqProducerApplicationTests {
@Autowired
private orderService orderservice;
@Test
void contextLoads2() {
orderservice.makeOrder("1","1",12);
}
}
新建Consumer SpringBoot程序
新建sevice文件夹,放入以下三个类
package com.robert.rabbitmq.consumer.service;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@RabbitListener(queues = "email.direct.queue")
@Component
public class DirectEmailConsumer {
@RabbitHandler
public void ReceiveMessage(String message){
System.out.println("email.direct接受到的信息为"+message);
}
}
package com.robert.rabbitmq.consumer.service;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@RabbitListener(queues = "message.direct.queue")
@Component
public class DirectMessageConsumer {
@RabbitHandler
public void ReceiveMessage(String message){
System.out.println("message.direct接受到的信息为"+message);
}
}
package com.robert.rabbitmq.consumer.service;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@RabbitListener(queues = "sms.direct.queue")
@Component
public class DirectSMSConsumer {
@RabbitHandler
public void ReceiveMessage(String message){
System.out.println("sms.direct接受到的信息为"+message);
}
}
运行程序
先运行生产者Producer SpringBoot Application启动程序
再运行consumer
By the way:由于在生产者中的配置类绑定了交换机exchange、队列queue、路由routingKey,所以先运行;也可以将配置类写在消费者中
运行效果如下
启动Docker
未启动生产者时的Rabbit Mq中exchange
启动生产者
运行完成
生产者之后的Rabbit Mq中exchange
生产者之后的Rabbit Mq中queue的绑定关系及routingKey
消息队列
启动消费者
消费者消费完成输出日志
目录结构如下
[学相伴]RabbitMQ最新完整教程IDEA版通俗易懂 | KuangStudy | 狂神说
https://www.bilibili.com/video/BV1dX4y1V73G
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.robert.rabbitmq</groupId>
<artifactId>springboot-order-rabbitmq-producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-order-rabbitmq-producer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
作者:你看我可爱不
链接:http://www.javaheidong.com/blog/article/207274/a6291b9ba0e47a9bbab5/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!