惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
有赞技术团队
有赞技术团队
H
Help Net Security
V
Visual Studio Blog
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LangChain Blog
N
Netflix TechBlog - Medium
罗磊的独立博客
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
Recent Announcements
Recent Announcements

牛牛技术客栈

设计模式-备忘录模式 - OXOXTECH 牛牛技术客栈 设计模式-中介者模式 - OXOXTECH 牛牛技术客栈 Linux【Ubuntu】修改ssh默认端口 - OXOXTECH 牛牛技术客栈 设计模式-迭代器模式 - OXOXTECH 牛牛技术客栈 scheduled定时任务的三种基本实现方式 - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(三) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(二) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(一) - OXOXTECH 牛牛技术客栈 基于JavaFX的桌面端网络调试工具 - OXOXTECH 牛牛技术客栈 Golang Channel的原理介绍 - OXOXTECH 牛牛技术客栈 Go语言Map的原理分析 - OXOXTECH 牛牛技术客栈 Go语言错误处理(panic)的最佳实践 - OXOXTECH 牛牛技术客栈 设计模式-解释器模式 - OXOXTECH 牛牛技术客栈 Redis报错Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. go-webpbin库在Linux报错failed to encode image to WebP: exit status 1.......的问题 exe4j 打包加密的jar - OXOXTECH 牛牛技术客栈 Go生成图形验证码示例 - OXOXTECH 牛牛技术客栈 澳门一天游:一日尽享东方与西方的交融之美 - OXOXTECH 牛牛技术客栈 设计模式-命令模式 - OXOXTECH 牛牛技术客栈 别再自己瞎写工具类了,SpringBoot内置工具类应有尽有 - OXOXTECH 牛牛技术客栈 中山一日游 - OXOXTECH 牛牛技术客栈 设计模式-责任链模式 - OXOXTECH 牛牛技术客栈 起舞吧,齐舞吧 - OXOXTECH 牛牛技术客栈 设计模式-组合模式 - OXOXTECH 牛牛技术客栈 Go语言Web开发|GoFrame框架入门笔记 - OXOXTECH 牛牛技术客栈 Java打包exe教程 - OXOXTECH 牛牛技术客栈 设计模式-代理模式 - OXOXTECH 牛牛技术客栈 MySQL存储过程的优缺点有哪些? - OXOXTECH 牛牛技术客栈 前端渲染优化有哪些? - OXOXTECH 牛牛技术客栈 HTTP状态码及其含义 - OXOXTECH 牛牛技术客栈
RabbitMQ系列(一)Hello World - OXOXTECH 牛牛技术客栈
Jensen · 2023-03-02 · via 牛牛技术客栈

Jensen 后端 教程, 技术, MQ

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,可以参考这两篇帖子:《【Linux CentOS 7安装RabbitMQ详细教程】》、《【Windows安装RabbitMQ详细教程】

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

看到此页面代表安装成功

882d7ef5cd59cef63ec4994cc6f547ee.png

准备就绪,先写个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. 测试

  • 先启动消费者
  • 再启动生产者
  • 可以看到消费者的控制台打印出 生产者传递的消息

image.png

小结

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

原文地址: https://mp.weixin.qq.com/s?__biz=Mzg4MjYyOTgwNw==&mid=2247494541&idx=1&sn=0a6fec9af27fa6e4bed25d4c5eacaf67&chksm=cf51664df826ef5b4064e261e8769979f5d1f6c7a02c373b4280309bc5af4d6cb1072d5dc1d0&scene=21#wechat_redirect