消息队列,外文名Message Queue,简称MQ,是指在消息的传输中保存消息的容器或服务。
消息队列,是分布式系统实现高性能、高可用、可伸缩等高级特效的重要组件,适用多种场景,如:消息通讯、异步处理、应用解耦、流量削峰等等。
消息队列主要有两种模式:点对点(Point to Point)模式和发布-订阅(Publisher-Subscriber)模式。
安装:
安装 RabbitMQ 之前要安装 Erlang ,可以去Erlang官网下载。接着去RabbitMQ官网下载安装包,之后解压缩即可。
+ 1 安装otp_win64_20.2.exe 配置环境变量: ERLANG_HOME=C:Program Fileserl9.2 PATH环境变量中添加变量: %ERLANG_HOME%bin + 2 安装rabbitmq-server-3.7.4.exe + 3.启动插件界面 + cd到启动sbin目录 cmd C:Program FilesRabbitMQ Serverrabbitmq_server-3.7.4sbin + 执行命令 rabbitmq-plugins.bat enable rabbitmq_management + 执行命令(或者在服务中右击鼠标进行重启): rabbitmqctl stop rabbitmq-server restart
1.引入依赖:
org.springframework.boot spring-boot-starter-amqp
2.在yml配置文件里配置RabbitMQ的ip端口号名字密码等
spring rabbitmq: host: 192.168.1.201 port: 5672 virtual-host: / username: guest password: guest # rabbitmq 的设置 mq: test: #交换机 exchange: message: exchange.message #队列 queue: message: queue.message #路由 routing: key: queue.message
3.启动类中参加
//获取yml中的属性对应的值' @Autowired private Environment environment; //创建队列 @Bean public Queue queueOrder() { return new Queue(environment.getProperty("mq.test.queue.message")); } //创建交互机 路由模式的交换机 @Bean public DirectExchange createExchange() { return new DirectExchange(environment.getProperty("mq.test.exchange.message")); } //创建绑定 指定routingkey @Bean public Binding createBinding() { return BindingBuilder.bind(queueOrder()).to(createExchange()).with(environment.getProperty("mq.test.routing.key")); }
4.发送消息
@RestController @RequestMapping("/send") public class Send { @Autowired private RabbitTemplate rabbitTemplate; @Value("${mq.test.exchange.message}") private String exchange; @Value("${mq.test.routing.key}") private String routing; @RequestMapping(value = "/test") public Result> test() { String msg = "消息内容,完美接通!!"; //参数1 指定交换机的名称 exchange //参数2 指定routingkey routing //参数3 指定消息本身 msg System.out.println("写进队列消息" + msg); rabbitTemplate.convertAndSend(exchange, routing, msg); return Result.OK("发送消息,测试成功", null); } }
5.接收消息,消息处理类,监听队列 (在接收方同样要导入mq的依赖和配置文件配置)
@RestController @RabbitListener(queues = "queue.message") public class Consumer { @RabbitHandler //处理字符类型 public void handler(String msg) { if (!StringUtils.isEmpty(msg)) { System.out.println("打印:" + msg); } else { System.out.println("通信失败"); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)