RabbitMQ 的快速使用

这篇具有很好参考价值的文章主要介绍了RabbitMQ 的快速使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker部署rabbitmq

 # management才有管理页面
docker pull rabbitmq:management

# 新建容器并运行
docker run \
 -e RABBITMQ_DEFAULT_USER=admin \ 
 -e RABBITMQ_DEFAULT_PASS=admin \ 
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 -itd \
 rabbitmq:management

# 查看运行状态
docker ps -a

 


 

导入RabbitMQ依赖

pom.xml
<!--AMQP依赖,包含RabbitMQ-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- 消息转换器需要用到的Jackson -->
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.10</version>
</dependency>

 

提供者和消费者的配置

application.yml
spring:
  rabbitmq:
    host: 192.168.137.139 # 主机名
    port: 5672 # 端口
    virtual-host: / # 虚拟主机
    username: admin # 用户名
    password: admin # 密码

 

消息转换器

提供者和消费者都可以添加

RabbitMQMessageConverterConfig.java
@Configuration
public class RabbitMQMessageConverterConfig {
    @Bean
    public static MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}

RabbitMQ 的快速使用,微服务,rabbitmq,分布式

 

注意执行顺序:需要先使用consumer监听并创建队列(需要保证队列存在!),publisher再往里面添加队列才会有用,否则白添加队列

 


 

SimpleQueue

RabbitMQ 的快速使用,微服务,rabbitmq,分布式

提供者: SimpleQueuePublisher.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleQueuePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void simpleQueueTest() {
        String msg = "hello, simple queue";
        rabbitTemplate.convertAndSend("simple.queue", msg);
    }
}
消费者:SimpleQueueConsumer.java
@Component
public class SimpleQueueConsumer {
    @RabbitListener(queues = "simple.queue")
    public void simpleQueueConsumer(String msg) {
        System.out.println("simpleQueueConsumer: " + msg);
    }
}

 


 

Work Queues

RabbitMQ 的快速使用,微服务,rabbitmq,分布式

可加配置

application.yml

spring:
  rabbitmq:
    listener:
      simple: # simple类型
        prefetch: 1 # consumer每次执行预取的数量
消费者:WorkQueueConsumer.java
@Component
public class WorkQueueConsumer {
    @RabbitListener(queuesToDeclare = {@Queue(name = "work.queue")})
    public void workQueue1Consumer(String msg) throws InterruptedException {
        System.out.println("workQueue1Consumer: " + msg);
        Thread.sleep(10);
    }

    @RabbitListener(queuesToDeclare = {@Queue(name = "work.queue")})
    public void workQueue2Consumer(String msg) throws InterruptedException {
        System.out.println("workQueue2Consumer: " + msg);
        Thread.sleep(90);
    }
}

提供者: WorkQueuePublisher.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class WorkQueuePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void workQueueTest() {
        for (int i = 1; i <= 100; i ++ ) {
            String msg = "hello, work queue. " + i;
            rabbitTemplate.convertAndSend("work.queue", msg);
        }
    }
}

 


 

发布/订阅

Fanout

RabbitMQ 的快速使用,微服务,rabbitmq,分布式

消费者:FanoutQueueConsumer.java
@Exchange@Queue注解中的declare属性默认为"true",如果不存在会自动创建exchange和queue。
@Component
public class FanoutQueueConsumer {
    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(name = "fanout", type = ExchangeTypes.FANOUT),
            value = @Queue(name = "fanout.queue1")
    ))
    public void fanoutQueue1Consumer(String msg) {
        System.out.println("fanoutQueue1Consumer: " + msg);
    }

    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(name = "fanout", type = ExchangeTypes.FANOUT),
            value = @Queue(name = "fanout.queue2")
    ))
    public void fanoutQueue2Consumer(String msg) {
        System.out.println("fanoutQueue2Consumer: " + msg);
    }

}
提供者: FanoutQueuePublisher.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class FanoutQueuePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void fanoutQueueTest() {
        String exchangeName = "fanout";
        String msg = "hello, fanout queue.";
        rabbitTemplate.convertAndSend(exchangeName, "", msg);
    }
}

 


 

Routing / Direct

RabbitMQ 的快速使用,微服务,rabbitmq,分布式

消费者:DirectQueueConsumer.java
@Component
public class DirectQueueConsumer {
    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(name = "direct", type = ExchangeTypes.DIRECT),
            value = @Queue(name = "direct.queue1")
    ))
    public void directQueue1Consumer(String msg) {
        System.out.println("directQueue1Consumer: " + msg);
    }

    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(name = "direct", type = ExchangeTypes.DIRECT),
            value = @Queue(name = "direct.queue2")
    ))
    public void directQueue2Consumer(String msg) {
        System.out.println("directQueue2Consumer: " + msg);
    }

}
提供者: DirectQueuePublisher.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class DirectQueuePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void directQueueTest() {
        String exchangeName = "direct";
        String key = "error";
//        String key = "warning";
        String msg = "hello, direct queue, " + key;
        rabbitTemplate.convertAndSend(exchangeName, key, msg);
    }
}

 


 

Topics

*: 通配一个单词#: 通配多个单词

RabbitMQ 的快速使用,微服务,rabbitmq,分布式文章来源地址https://www.toymoban.com/news/detail-685878.html

消费者:TopicQueueConsumer.java
@Configuration
public class TopicQueueConsumer {
    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(name = "topic", type = ExchangeTypes.TOPIC),
            value = @Queue(name = "topic.queue1"),
            key = {"*.orange.*"}
    ))
    public void topicQueue1Consumer(String msg) {
        System.out.println("topicQueue1Consumer: " + msg);
    }

    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(name = "topic", type = ExchangeTypes.TOPIC),
            value = @Queue(name = "topic.queue2"),
            key = {"*.*.rabbit", "lazy.#"}
    ))
    public void topicQueue2Consumer(String msg) {
        System.out.println("topicQueue2Consumer: " + msg);
    }
}
提供者: TopicQueuePublisher.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class TopicQueuePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void topicQueueTest() {
        String exchangeName = "topic";
        String key = "lazy.orange.rabbit";
        String msg = "hello, topic queue. " + key;
        rabbitTemplate.convertAndSend(exchangeName, key, msg);
    }
}

到了这里,关于RabbitMQ 的快速使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式消息队列:Rabbitmq(2)

    目录 一:交换机 1:Direct交换机 1.1生产者端代码:  1.2:消费者端代码: 2:Topic主题交换机  2.1:生产者代码:  2.2:消费者代码:  二:核心特性 2.1:消息过期机制 2.1.1:给队列中的全部消息指定过期时间 2.1.2:给某条消息指定过期时间  2.2:死信队列 绑定: 让交换机和队列进行关联,可以指

    2024年02月08日
    浏览(41)
  • 分布式消息队列:RabbitMQ(1)

    目录 一:中间件 二:分布式消息队列  2.1:是消息队列 2.1.1:消息队列的优势 2.1.1.1:异步处理化 2.1.1.2:削峰填谷 2.2:分布式消息队列 2.2.1:分布式消息队列的优势 2.2.1.1:数据的持久化 2.2.1.2:可扩展性 2.2.1.3:应用解耦 2.2.1.4:发送订阅  2.2.2:分布式消息队列的应用场景  三:Rabbitmq 3.1:基

    2024年02月08日
    浏览(62)
  • Rabbitmq----分布式场景下的应用

    如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中,面临着很多实际问题需要思考: 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消

    2024年02月08日
    浏览(46)
  • RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!

    分布式事务是指涉及多个独立的计算机系统(也称为节点或参与者)之间的事务处理。在分布式系统中,每个节点可能各自拥有自己的数据存储和事务管理机制。分布式事务的目标是保证在跨多个节点执行的一系列操作可以以一致和可靠的方式执行和提交,即使在面对故障或

    2024年04月23日
    浏览(46)
  • 分布式消息队列:Kafka vs RabbitMQ vs ActiveMQ

    在现代分布式系统中,消息队列是一种常见的异步通信模式,它可以帮助系统处理高并发、高可用性以及容错等问题。在这篇文章中,我们将深入探讨三种流行的分布式消息队列:Apache Kafka、RabbitMQ和ActiveMQ。我们将讨论它们的核心概念、算法原理、特点以及使用场景。 随着

    2024年02月02日
    浏览(59)
  • Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

    在大规模数据采集和处理任务中,使用分布式架构可以提高效率和可扩展性。本文将介绍Python爬虫分布式架构中常用的消息队列工具Redis和RabbitMQ的工作流程,帮助你理解分布式爬虫的原理和应用。 为什么需要分布式架构? 在数据采集任务中,单机爬虫可能面临性能瓶颈和资

    2024年02月11日
    浏览(40)
  • (黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 聚合 可以让我们极其方便

    2024年03月12日
    浏览(52)
  • 分布式搜索引擎(Elastic Search)+消息队列(RabbitMQ)部署(商城4)

    1、全文搜索 Elastic search可以用于实现全文搜索功能,例如商城中对商品搜索、搜索、分类搜索、订单搜索、客户搜索等。它支持复杂的查询语句、中文分词、近似搜索等功能,可以快速地搜索并返回匹配的结果。 2、日志分析 Elastic search可以用于实现实时日志分析,例

    2024年02月04日
    浏览(47)
  • 分布式 SpringCloudAlibaba、Feign与RabbitMQ实现MySQL到ES数据同步

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 同步调用 方案一:同步调用 基本步骤如下: hotel-demo对外提供接口,用来修改elasticsearch中的数据 酒店管理服务在完成数据库操

    2024年04月11日
    浏览(45)
  • (黑马出品_高级篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 消息队列在使用过程中,面

    2024年03月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包