0
点赞
收藏
分享

微信扫一扫

RabbitMQ — 异步调用

自由情感小屋 2024-11-10 阅读 11

目录

初识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);
}

七:消息转换器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

举报

相关推荐

0 条评论