目录
初识MQ
一:同步调用
二:异步调用
三:技术选型
RabbitMQ
一:安装部署
使用docker安装:
docker run \
-e RABBITMQ_DEFAULT_USER=itheima \
-e RABBITMQ_DEFAULT_PASS=123321 \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
--network hm-net\
-d \
rabbitmq:3.8-management
然后访问15672是rabbitMQ的控制台端口,5672是消息接发
然后就可以访问15672端口控制台
二:快速入门
三:数据隔离
java客户端
一:快速入门
publisher是发消息:
如何发消息:
1:引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2:配置yaml文件
spring:
rabbitmq:
host: 117.72.106.51 # 你的虚拟机IP
port: 5672 # 端口
virtual-host: /hmall # 虚拟主机
username: hmall # 用户名
password: 123 # 密码
3:创建测试类(注意测试类要和main在相同包下)
@SpringBootTest
class PublisherApplicationTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void rabbitPublish() {
String queueName="simple.queue";
String msg="hello,springAMQP";
rabbitTemplate.convertAndSend(queueName,msg);
}
}
4:接收消息:
@Slf4j
@Component
public class SpringRabbitListener {
@RabbitListener(queues = "simple.queue")
public void Lisen(String msg){
log.info(msg);
}
}
二:workqueues
listener:
direct:
prefetch: 1 #一次只会分配一条消息
三:Fanout交换机
四:Direct交换机
五:Topic交换机
六:声明队列和交换机
1:基于bean声明
@Configuration
public class FanoutConfiguration {
@Bean
public Queue queueBuilder1(){
return new Queue("fanout.queue1");
}
@Bean
public Queue queueBuilder2(){
return new Queue("fanout.queue2");
}
@Bean
public FanoutExchange fanoutExchange(){
return new FanoutExchange("hmall.fanout");
}
@Bean
public Binding binding1(){
return BindingBuilder.bind(queueBuilder1()).to(fanoutExchange());
}
@Bean
public Binding binding2(){
return BindingBuilder.bind(queueBuilder2()).to(fanoutExchange());
}
}
2:基于注解
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "direct.queue1"),
exchange = @Exchange(name = "hmall.direct",type = ExchangeTypes.DIRECT),
key = {"blue","red"}
))
public void Listen3(String msg){
log.info("dirct.queue1"+msg);
}
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "direct.queue2"),
exchange = @Exchange(name = "hmall.direct",type = ExchangeTypes.DIRECT),
key = {"yellow","red"}
))
public void Listen4(String msg){
log.info("dirct.queue2"+msg);
}