RabbitMQ 快速入门(简单模式)

RabbitMQ 快速入门(简单模式)

  • 注意: 需要开放5672端口
    简单模式图片
    在这里插入图片描述

  • 步骤

    1. 创建工程(生产者、消费者)
    2. 分别添加依赖
    3. 编写生产者发布消息
    4. 编写消费者接受消息
    • 一. 创建工程(生产者、消费者)
      在这里插入图片描述

    • 分别添加依赖

      <dependencies>
              <dependency>
                  <groupId>com.rabbitmq</groupId>
                  <artifactId>amqp-client</artifactId>
                  <version>5.6.0</version>
              </dependency>
          </dependencies>
      
      
      <build>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.8.0</version>
                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      
    • 编写生产者发布消息(具体步骤)

      1. ConnectionFactory factory = new ConnectionFactory();
      2. 设置参数
        factory.setHost("192.168.20.146") //设置ip;
        factory.setPort(5672); //设置端口
        factory.setUsername("test"); //设置账号
        factory.setPassword("test"); //设置密码
        factory.setVirtualHost("/test"); //设置虚拟主机
      3. 创建连接
        Connection connection = factory.newConnection();
      4. 创建Channel(管道)
        Channel channel = connection.createChannel();
      5. 创建队列Queue
        channel.queueDeclare("test_queue",true,false,false,null);
      6. 发送信息
        String body = "hello rabbitmq~~";
        channel.basicPublish("", "test_queue", null, body.getBytes());
      7. 释放资源
        channel.close();
        connection.close();
    • 编写生产者发布消息 代码

package com.yang;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer_HelloWord {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1.连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2.设置参数
        //设置ip
        factory.setHost("192.168.20.146");
        //设置端口
        factory.setPort(5672);
        //设置账号
        factory.setUsername("test");
        //设置密码
        factory.setPassword("test");
        //设置虚拟主机
        factory.setVirtualHost("/test");
        //3. 创建连接
        Connection connection = factory.newConnection();
        //4. 创建Channel(管道)
        Channel channel = connection.createChannel();
        //5. 创建队列Queue
        /*
          参数说明:
          Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                           Map<String, Object> arguments) throws IOException;
            1. queue: 队列名称
            2. durable: 是否持久化 (mq重启之后还在)
            3. exclusive:
                    * 是否独占 只能有一个消费者监听这队列
                    * 当Connection关闭时,是否删除队列
            4. autoDelete: 是否自动删除。当没有Consumer时,自动删除掉
            5. arguments: 参数

         */
        channel.queueDeclare("test_queue",true,false,false,null);

        //6. 发送信息
        /*
            参数说明:
            void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException;
                1. exchange: 交换机名称。简单模式下交换机会使用默认的 ""
                2. routingKey: 路由名称
                3. props:配置信息
                4. body:发送消息数据
         */
        String body = "hello rabbitmq~~";
        channel.basicPublish("", "test_queue", null, body.getBytes());

        //7. 释放资源
        channel.close();
        connection.close();
    }
}

在这里插入图片描述


  • 编写消费者发布消息(具体步骤)

    1. 其实1~4步是一样的,省略
    2. 第5步可有可无,因为队列只需要创建一次就不会再创建了!
    3. 第六步接收消息
  • 编写生产者发布消息 代码

package com.yang;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer_HelloWord {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1. 创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2. 设置参数
        factory.setHost("192.168.20.146");
        factory.setPort(5672);
        factory.setUsername("test");
        factory.setPassword("test");
        factory.setVirtualHost("/test");
        //3. 创建连接
        Connection connection = factory.newConnection();
        //4. 创建channel(管道)
        Channel channel = connection.createChannel();
        //5.创建队列(可以省略,因为我们在生产者哪里已经创建了,没必要写,因为它只会创建一次)
        channel.queueDeclare("test_queue",true,false,false,null);
        //6.接受请求
        Consumer consumer = new DefaultConsumer(channel){
            /**
             * 重写回调方法
             * @param consumerTag 标识
             * @param envelope 获取一些信息,交换机,路由key...
             * @param properties 配置信息
             * @param body 数据
             * @throws IOException
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("consumerTag:"+consumerTag);
                System.out.println("Exchange:"+envelope.getExchange());
                System.out.println("RoutingKey:"+envelope.getRoutingKey());
                System.out.println("properties:"+properties);
                System.out.println("body:"+new String(body));
            }
        };
         /*
        basicConsume(String queue, boolean autoAck, Consumer callback)
        参数:
            1. queue:队列名称
            2. autoAck:是否自动确认
            3. callback:回调对象

         */
        channel.basicConsume("test_queue",true,consumer);

    }
}

  • 接收到的消息
    在这里插入图片描述
  • 此时我们队列的消息就被消费完了
    在这里插入图片描述

在这里插入图片描述

  • 小结
    • P:生产者,也就是要发送消息的程序
    • C:消费者:消息的接收者,会一直等待消息到来
    • queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息

以上就是简单模式的全部内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值