0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RabbitMQ是什么

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-09-25 14:36 次阅读

在工作中经常会用到消息队列处理各种问题,今天指北君带领大家来学一个很常用到的技术-RabbitMQ;接下来还会有关于RabbitMQ的系列教程,对你有帮助的话记得关注哦~

RabbitMQ是什么

队列 :一种数据结构,先进先出。

消息队列 :简单的说就是用来进行消息传输的队列。

消息中间件 :简单的说就是用来传输消息的中间载体,就是将你的信息发送到接受方,它并不关心发送的数据是什么。RabbitMQ就是一个消息中间件。

RabbitMQ的特点

  • 可靠性。支持持久化,传输确认,发布确认等保证了MQ的可靠性。
  • 灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。
  • 支持集群。多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
  • 多种协议。RabbitMQ支持多种消息队列协议,比如 STOMP、MQTT 等等。
  • 支持多种语言客户端。RabbitMQ几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
  • 可视化管理界面。RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker。
  • 插件机制。RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。

为什么使用消息队列

  1. 解耦 ,模块间的通信使用消息队列进行,降低模块之间的耦合度。
  2. 异步 ,模块A处理完核心业务之后,发消息给模块B,就可以直接返回给客户端,提高性能。
  3. 削峰 ,短时间内有大量请求,可以通过消息队列来逐个处理,防止系统宕机。

Hello World

首先,安装RabbitMQ,可直接使用docker安装一个。

docker 地址:https://hub.docker.com/_/rabbitmq/tags

# 拉取镜像
docker pull rabbitmq:management

# 启动容器
docker run -id --hostname my-rabbit 
 --name rabbitmq 
 -p 15672:15672 
 -p 5672:5672 
 -e RABBITMQ_DEFAULT_USER=admin 
 -e RABBITMQ_DEFAULT_PASS=admin 
 rabbitmq:management

然后在网页访问:http://服务器的ip:15672,输入账号密码。记得开放端口

看到此页面代表安装成功

图片

准备就绪,先写个Hello World

  1. 导入pom依赖
    < dependency >
         < groupId >org.springframework.boot< /groupId >
         < artifactId >spring-boot-starter-amqp< /artifactId >
    < /dependency >
    
  2. 准备工具类
    public class ConnectionUtils {
    
        public static Connection getConnection() {
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("1.15.88.28");
            factory.setPort(5672);
            factory.setUsername("admin");
            factory.setPassword("admin");
            factory.setVirtualHost("/");
            try {
                return factory.newConnection();
            } catch (IOException | TimeoutException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
  3. 生产者
    public class Producer {
        // 声明队列的名字
        private static final String QUEUE_NAME = "queue_helloworld_1";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            // 1. 获取连接
            Connection connection = ConnectionUtils.getConnection();
            // 2. 创建数据传输通道
            Channel channel = connection.createChannel();
            // 3. 声明队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            // 4. 发送数据到队列
            channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, "第一个队列消息...".getBytes());
            // 5. 关闭通道
            channel.close();
            // 6. 关闭连接
            connection.close();
        }
    }
    
  4. 消费者
    public class Consumer {
        // 声明队列的名字
        private static final String QUEUE_NAME = "queue_helloworld_1";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            // 1. 获取连接
            Connection connection = ConnectionUtils.getConnection();
            // 2. 创建通道
            Channel channel = connection.createChannel();
            // 3. 声明队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            // 4. 声明消费者
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("接收到的消息是:" + new String(body));
                    channel.basicAck(envelope.getDeliveryTag(), false);
                }
            };
            // 5. 绑定消费者
            channel.basicConsume(QUEUE_NAME, false, defaultConsumer);
        }
    }
    
  5. 测试
    1. 先启动消费者
    2. 再启动生产者
    3. 可以看到消费者的控制台打印出 生产者传递的消息
      图片

小结

本文到这里就结束了,简单介绍了一下RabbitMQ是什么,以及RabbitMQ的安装;

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2707

    浏览量

    47474
  • 服务器
    +关注

    关注

    12

    文章

    9160

    浏览量

    85421
  • 交换机
    +关注

    关注

    21

    文章

    2640

    浏览量

    99640
  • 端口
    +关注

    关注

    4

    文章

    964

    浏览量

    32079
  • rabbitmq
    +关注

    关注

    0

    文章

    17

    浏览量

    1030
收藏 人收藏

    评论

    相关推荐

    RabbitMQ中的发布订阅模型

    上一篇文章中,简单的介绍了一下RabbitMQ的work模型。这篇文章来学习一下RabbitMQ中的发布订阅模型。 发布订阅模型(Publish/Subscribe):简单的说就是队列里面的消息会被
    的头像 发表于 09-25 14:30 524次阅读
    <b class='flag-5'>RabbitMQ</b>中的发布订阅模型

    RabbitMQ通信模型中的work模型

    上一篇文章中,简单的介绍了一下RabbitMQ,以及安装和hello world。 有的小伙伴留言说看不懂其中的方法参数,这里先解释一下几个基本的方法参数。 // 声明队列方法
    的头像 发表于 09-25 14:34 515次阅读
    <b class='flag-5'>RabbitMQ</b>通信模型中的work模型

    RabbitMq入门教程

    RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统。
    的头像 发表于 12-04 11:10 504次阅读
    <b class='flag-5'>RabbitMq</b>入门教程

    基于Docker Compose部署RabbitMQ的经验分享

    RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。
    的头像 发表于 01-03 10:22 1941次阅读
    基于Docker Compose部署<b class='flag-5'>RabbitMQ</b>的经验分享

    请问有STM32F4上应用RabbitMQ或MQTT的例子吗?

    ,是需要跑FreeRTOS 或 uCOS 么? 还是裸跑也没有问题的?3、有没有前辈能提供一下应用MOTT在STM32上的例子;另外,如果我想要用RabbitMQ呢?有没有参考的例子?
    发表于 04-03 04:35

    【飞凌嵌入式 RK3399 开发板性能试用体验】(安装RabbitMQ消息队列服务)

    说明relang安装成功安装RabbitMQServer消息队列服务apt-get install rabbitmq-server #安装成功自动启动查看RabbitMQServer安装状态
    发表于 10-28 17:03

    Rabbitmq与esp-open-rtos集成失败了怎么解决?

    我尝试将 Rabbitmq 与 esp-open-rtos 集成,但失败了。 谁能帮忙?
    发表于 05-10 11:45

    RabbitMQ-CN RabbitMQ中文文档

    RabbitMQ_into_Chinese.zip
    发表于 04-19 10:51 0次下载
    <b class='flag-5'>RabbitMQ</b>-CN <b class='flag-5'>RabbitMQ</b>中文文档

    什么情况下使用RabbitMQ或 Kafka

    如果你问自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在这里阻止你。本文将从更广泛的角度讨论这两种情况。它关注的是这两个系统提供的功能,并将指导您做出正确的决定,决定何时使用哪个系统。
    的头像 发表于 02-22 10:35 573次阅读
    什么情况下使用<b class='flag-5'>RabbitMQ</b>或 Kafka

    什么情况下使用RabbitMQ或 Kafka

    如果你问自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在这里阻止你。本文将从更广泛的角度讨论这两种情况。它关注的是这两个系统提供的功能,并将指导您做出正确的决定,决定何时使用哪个系统。
    的头像 发表于 02-24 11:12 598次阅读
    什么情况下使用<b class='flag-5'>RabbitMQ</b>或 Kafka

    RabbitMQ:消息传递的中介

    电子发烧友网站提供《RabbitMQ:消息传递的中介.zip》资料免费下载
    发表于 06-14 16:08 0次下载
    <b class='flag-5'>RabbitMQ</b>:消息传递的中介

    rabbitmq是什么?rabbitmq安装、原理、部署

    rabbitmq是什么? MQ的全称是Messagee Queue,因为消息的队列是队列,所以遵循FIFO 先进先出的原则是上下游传递信息的跨过程通信机制。 RabbitMQ是一套开源(MPL
    的头像 发表于 07-19 13:50 1035次阅读

    RocketMQ和RabbitMQ的区别

    RocketMQ和RabbitMQ的区别: 架构设计:RocketMQ是基于主题(Topic)的发布/订阅模式,而RabbitMQ则是基于队列(Queue)的消息代理系统。 语言支持
    的头像 发表于 07-24 13:39 1.4w次阅读

    RabbitMQ中的路由模型(direct)

    路由模型 RabbitMQ 提供了五种不同的通信模型,上一篇文章中,简单的介绍了一下RabbitMQ的发布订阅模型模型。这篇文章来学习一下RabbitMQ中的路由模型(direct)。 路由模型
    的头像 发表于 09-25 11:32 505次阅读

    redis和rabbitMQ的区别

    Redis和RabbitMQ是两个流行的开源消息传递技术,用于构建高可靠、可扩展和可扩展的应用程序。虽然它们都用于实现消息传递机制,但它们在设计和运作方式上存在一些不同之处。在本文中,我们将详细讨论
    的头像 发表于 12-04 14:48 1402次阅读