首页 > 其他分享 >rabbitMQ

rabbitMQ

时间:2024-05-03 15:11:21浏览次数:27  
标签:rabbitMQ queue 交换机 消息 message public

同步调用的优点:时效性强,等待到结果后才会返回

       缺点:拓展性差,性能下降,级联失败问题

异步调用的优点:接触耦合,增强拓展性;无需等待,性能好;故障隔离;缓存消息,流量削峰填谷

     缺点:时效性差,不确定是否成功,业务安全依赖于broker的可靠性

 

rabbitMQ整体架构:

  virtual-host:因为rabbitMQ吞吐量可以达到10W,所以我们可以让多个项目公用同一个rabbitMQ。为了防止不同项目的exchange和queue不互相干扰,我们引入了virtualhost

 在发送消息的时候,exchange只负责路由,不会存储消息

 

如何在spring中使用amqp:

1.引入依赖

  <!--AMQP依赖,包含RabbitMQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

2.编写yml

spring:
  rabbitmq:
    host: 192.168.88.95
    port: 5672
    virtual-host: /hmall
    username: hmall
    password: 123

3.publisher(记得提前在15672中创建好queue)

@Autowired
    RabbitTemplate rabbitTemplate;
    @Test
    public void test(){
        String queueName="simple.queue";
        String message="你好呀!小兔子";
        rabbitTemplate.convertAndSend(queueName,message);
    }

4.consumer

@Component
@Slf4j
public class SpringRabbitMqListener {
    @RabbitListener(queues = "simple.queue")
    public void listener(String message) {
        log.info("收到的消息是{}",message);
    }
}

 

 

workqueue模式:多个消费者绑定一个queue,这样做可以分担压力。默认状态下消费模式类似于轮询。

当然,我们可以通过修改preFetch来进行消息推送限制:每次只能获取prefetch条消息,处理完成后才能获取下一条消息。实现分配均衡

  rabbitmq:
    listener:
      simple:
        prefetch: 1

 

交换机:接收消息,并路由到队列上

fanout交换机:广播 :将消息路由到每一个和他绑定的队列上。

direct交换机:将收到的消息根据规则去路由到指定的queue:

      queue与exchange绑定时会有一个bindingkey,发布者发送消息的时候指定具体的bindingkey,具有一致key的queue会收到消息

topic交换机:与direct大致相同,不同点为:routingKey由多个单词组成,用.分割,具有通配符:#代表一个或多个单词,*代表一个单词

 

基于Bean生成队列交换机

@Configuration
public class FanoutConfiguration {
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("hmall.fanout");
    }
    @Bean
    public Queue fanoutQueue1(){
        return new Queue("fanout.queue1");
    }
    @Bean
    public Binding fanoutQueue1Bind(FanoutExchange fanoutExchange,Queue fanoutQueue1){
        return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
    }
}

基于注解生成队列交换机

@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "direct.queue1",durable = "true"),
            exchange = @Exchange(name = "hmall.direct",type = ExchangeTypes.DIRECT),
            key = {"white","all"}
    ))
    public void directListener1(String message) {
        log.info("白组收到的消息是:{}",message);
    }

 

消息转换器:推荐使用json替代jdk序列化

标签:rabbitMQ,queue,交换机,消息,message,public
From: https://www.cnblogs.com/kun1790051360/p/18169470

相关文章

  • 轻松使用Aspire rabbitmq framework
    轻松使用aspirerabbitmq创作初衷aspire是微软基金会推出的新一代云原生编排框架,具体请看https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview我从preview1-preview6(目前最新2024/5/1)一直都有使用,在第一版的时候我就用它放入了我的一个微服务......
  • RabbitMQ docker集群 多机器部署
    参考参考https://blog.csdn.net/m0_47214030/article/details/131358298 ipporthostname192.168.2.2016041node1192.168.2.2026041node2192.168.2.2036041node31、启动三个RabbitMQ容器 新版本已经不建议通过环境变......
  • rabbitmq
    一消息队列介绍1.1介绍消息队列就是基础数据结构中的“先进先出”的一种数据机构。想一下,生活中买东西,需要排队,先排的人先买消费,就是典型的“先进先出”1.2MQ解决什么问题MQ是一直存在,不过随着微服务架构的流行,成了解决微服务之间问题的常用工具。应用解耦以电商应用为例......
  • rabbitmq系列03---发布确认
    一、发布确认逻辑生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的......
  • Rabbitmq系列02---Exchange
    个人理解:交换机的类型划分个人理解是能过routingkey来划分的,一是否按routingkey找队列;fanout就是不按routingkey找队列,Direct和Topicr按routingkey找队列,只是一个模糊找,一个精准找,而headers不按routingkey是按消头中的内容找队列。一、Fanout(订阅模式|广播模式)  Fanout......
  • RabbitMQ处理消费者过载的策略
    RabbitMQ的消费者过载指的是在RabbitMQ消息队列系统中,消费者(即处理消息的应用程序或进程)无法及时处理从队列中接收到的消息,导致消息在队列中积压,进而可能引发系统性能下降、延迟增加或甚至系统崩溃等问题。引起消费者过载的原因:高负载产生的流量:当生产者向RabbitMQ发送大量消息......
  • RabbitMQ工作原理详解
    RabbitMQ的工作原理主要涉及生产者、消费者、交换机、队列和绑定等组件的交互。以下是其工作原理的详细解释:1、生产者(Producer):生产者负责创建消息并将其发送到RabbitMQ服务器。这些消息可以包含任何类型的数据,如JSON、XML等。生产者首先与RabbitMQ服务器建立连接,并创建一个通......
  • Window下运行Nginx、Redis、ES、RabbitMQ、Consul
    前言有时候需要在Windows下快速安装运行环境,比如Redis、Elasticsearch等,想通过bat命令快速启动。1.Nginx下载地址:https://nginx.org/en/download.html解压2.Redis下载地址:https://github.com/tporadowski/redis/releases解压3.Elasticsearch下载地址:https://www.elas......
  • 6.prometheus监控--监控redis/rabbitmq/mongodb
    1.监控redis1.1安装方式1.1.1二进制源码安装方式参考nginx二进制安装方法redis_exporter下载地址:https://github.com/oliver006/redis_exporter/releases系统服务:cat>/etc/systemd/system/redis_exporter.service<<"EOF"[Unit]Description=PrometheusRedisExport......
  • docker安装rabbitmq
    拉取镜像dockerpullrabbitmq:3.12.12运行容器cd/usr/local/dockerdockerrun-d--namerabbitmq3.12.12-p5672:5672-p15672:15672-v`pwd`/data:/var/lib/rabbitmq--hostnamemyRabbit-eRABBITMQ_DEFAULT_VHOST=my_vhost-eRABBITMQ_DEFAULT_USER=admin-e......