栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础之《RabbitMQ(1)—基础知识》

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础之《RabbitMQ(1)—基础知识》

一、为什么需要rabbit mq
1、同步变异步
同步:

异步传统的做法是加个线程池:

异步消息队列MQ:

解决了:
(1)不用自己实现线程池
(2)解耦

2、高内聚低耦合

如果在订单服务中,要加微信通知功能。同步方式就要改订单服务代码。用消息队列方式,不用改订单服务一行代码,新增一个微信服务,然后订阅MQ系统消息就可以了
解耦的目的就是,每个服务只关心自己的逻辑业务

3、流量削峰

用户请求过来,先写消息队列,消息队列设置最大值。如果超过最大值则抛弃消息,或者跳转到错误页面。秒杀服务根据消息队列做后续的下单处理

4、什么是队列
队列就像存放商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站。
(1)队列存储了什么
在RabbitMQ中,信息流从你的应用程序出发,来到RabbitMQ的队列,所有信息可以只存储在一个队列中。
队列可以存储很多的消息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。
(2)队列和应用程序的关系
多个生产者可以将消息发送到同一个队列中,多个消费者也可以只从同一个队列接收数据。

二、springboot整合rabbitmq

1、pom文件添加



	org.springframework.boot
	spring-boot-starter-amqp


	org.springframework.boot
	spring-boot-starter-web

2、配置文件添加

spring:
    rabbitmq:
        host: 192.168.3.203
        port: 5672
        username: admin
        password: admin
        virtual-host: my_vhost

注:不设置虚拟host,应用启动会报错 

3、添加发送队列RabbitSenderConfig.java
经测试不用配置这个类,发送端和接收端只要填对queue名称就能发送和接收!

package com.example.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitSenderConfig {

	@Bean
	public Queue queue() {
		//有四个参数
		//name: 队列名称
		//durable: 是否持久化,默认true
		//exclusive: 该队列只能被创建者使用,默认false
		//autoDelete: 长时间不用队列会被自动删除,默认false
		return new Queue("testQueue");
	}
	
}

4、添加消息发送类RabbitController.java

package com.example.web;

import java.util.Date;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@Api(description = "rabbitmq测试接口")
@RestController
@RequestMapping("/rabbit")
public class RabbitController {

	@Autowired
	RabbitTemplate rabbitTemplate;
	
	@ApiOperation("发送一条记录")
	@GetMapping("/send")
	public void send() {
		String msg = "hello" + new Date();
		//第一个参数是queue名称,第二个参数是msg
		rabbitTemplate.convertAndSend("testQueue", msg);
	}
}

5、添加消息接收类RabbitService.java

package com.example.rabbit;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class RabbitService {

	@RabbitListener(queues = "testQueue") //监听队列名称
	public void process(String msg) {
		System.out.println("receiver:" + msg);
	}
}

6、测试并登陆后台查看Queue

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号