03快速入门RabbitMQ简单队列

目录

看完架构图整个流程,我们需要做什么?

 具体流程怎么实现呢?

导入依赖:

建立连接: 

生产者:

消费者:


看完架构图整个流程,我们需要做什么?

  1. 创建一个生产者
  2. 创建一个 Virtual Hosts 
  3. 创建一个交换机
  4. 创建一个信道 
  5. 创建一个消费者

 具体流程怎么实现呢?

03快速入门RabbitMQ简单队列_第1张图片

 整个流程:

        Producer: 建立连接 —> 创建信道—> 发送消息到 VirtualHost —> Exchange 按照规则进行分发到Queue中 

        Consumer:建立连接—> 创建信道—>监听Queue。

注意:在使用代码进行测试的时候,需要将 Vitual Hosts 和Queue 在RabbitMQ中创建。不然会爆出找不到的问题

导入依赖:


            com.rabbitmq
            amqp-client
            4.4.2
        

建立连接: 

 在生产者与消费者中都用到了连接,所以将此对象的获取抽取出来。

package com;

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

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


/**
 * 获取rabbitmq的连接
 */
public class RabbitMQConnection {

    private static final String IP_ADDRESS = "127.0.0.1";

    //RabbitMQ有三个端口号:分别是 5672,15672,25672。注意他们的使用场景
    private static final int PORT = 5672;

    /**
     * 获取Connection连接
     * @return
     */
    public static Connection getConnection() throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        //配置访问地址与端口
        factory.setHost(IP_ADDRESS);
        factory.setPort(PORT);

        //配置账号密码
        factory.setUsername("guest");
        factory.setPassword("guest");

        //配置VirtualHost(其实是分区)
        factory.setVirtualHost("test");

        return factory.newConnection();
    }

}

生产者:

package com;

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

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

/**
 * 生产者代码测试
 */
public class Producer {

    private static final String QUEUE_NAME = "test";

    public static void main(String[] args) throws IOException, TimeoutException {

        //1.获取连接
        Connection connection = RabbitMQConnection.getConnection();

        //2.创建channel
        Channel channel = connection.createChannel();

        //3.发送消息
        String message = "发布成功了";
        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());

        //关闭信道与连接
        channel.close();
        connection.close();
    }

}

消费者:

package com;

import com.rabbitmq.client.*;

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

/**
 * 消费者
 */
public class Customer {

    private static final String QUEUE_NAME="test";

    public static void main(String[] args) throws IOException, TimeoutException {
        //1.获取连接
        Connection connection = RabbitMQConnection.getConnection();

        //2.创建channel
        Channel channel = connection.createChannel();

        //3.监听队列
        channel.basicConsume(QUEUE_NAME,true,getCustomer(channel));

    }

    /**
     * 创建一个消费者
     * @return
     */
    public static DefaultConsumer getCustomer(Channel channel){
        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));
                super.handleDelivery(consumerTag, envelope, properties, body);
            }
        };
        return defaultConsumer;
    }

}

当然这只是一个最简单的使用。接下来,我将记录更加复杂的使用情况。

你可能感兴趣的:(rabbitmq,rabbitmq,分布式)