RabbitMQ系列(一)Hello World

RabbitMQ是什么

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

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

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

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.bootgroupId
    >
    <artifactId>spring-boot-starter-amqpartifactId>
    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的安装;

展开阅读全文

页面更新:2024-05-01

标签:生产者   队列   插件   模块   通道   声明   消费者   消息   模式   简单   系列

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top