RabbitMQ(三) HelloWorld 单生产者单消费者示例实现

一、创建Maven工程,引入RabbitMQ依赖。

pom.xml 如下:



    4.0.0
    org.example
    RabbitMQ
    1.0-SNAPSHOT

    
        
            com.rabbitmq
            amqp-client
            5.6.0
        
    

二、创建获取连接工具类 ConnectionUtils

通过创建连接工厂对象,并进行响应的设值操作之后,通过newConntection方法我们获取到一个新的连接。

package com.xiaohui.rabbitmq.utils;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class ConnectionUtils {

    public static Connection getConnection() throws IOException, TimeoutException {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("172.18.255.186");
        //设置连接端口
        connectionFactory.setPort(5672);
        //设置虚拟主机地址
        connectionFactory.setVirtualHost("/myhost");
        //设置链接用户名以及密码
        connectionFactory.setUsername("xiaohui");
        connectionFactory.setPassword("root");
        //创建连接
        Connection connection = connectionFactory.newConnection();
        return connection;
    }
}

通过官网资料查看如果不设置用户密码等信息,系统会默认的给一些初始化值,通过源码我们也可以看到。

RabbitMQ(三) HelloWorld 单生产者单消费者示例实现_第1张图片

三、创建Producter.java 编写生产者代码

在编写消息发送代码时,我们首先需要获取Connection链接对象。在进行信道创建、声明消息队列信息、发送消息等步骤进行发送消息到mqserver上。然后可以进行关闭渠道以及连接对象。

其中通过源码注解我们可以知道在声明消息队列时一些相关参数含义:

Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                 Map arguments) throws IOException;

第一个参数表示消息队列名称;第二个参数表示是否独占链接、第三个表示是否持久化消息(mq重启后之前的消息还存在不丢失)、第四个表示是否自动在不使用时自动删除队列(不是删除消息)

package com.xiaohui.rabbitmq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xiaohui.rabbitmq.utils.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 生产者
 */
public class Producer {

    public static final  String QUEUE_NAME = "simple_queue";

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

        Connection connection = ConnectionUtils.getConnection();
        //创建渠道
        Channel channel = connection.createChannel();
        //声明创建队列
        channel.queueDeclare(QUEUE_NAME,true,false, false, null);

        //发送消息
        String msg = "再来一条hahahah。。。。";
        channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
        //释放资源(关闭渠道 以及连接)
        channel.close();
        connection.close();
    }
}

四、创建Cunsumer.java 编写消费者代码

主要步骤:

  1. 获取连接对象
  2. 使用连接对象创建信道
  3. 声明和生产者相同的消息队列
  4. 创建一个消息监听对象,并实现一个完成接受的一个回调函数实现信息打印(非必须)
  5. 设置开始监听
package com.xiaohui.rabbitmq.simple;

import com.rabbitmq.client.*;
import com.xiaohui.rabbitmq.utils.ConnectionUtils;

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

public class Cunsumer {

    public static void main(String[] args) throws IOException, TimeoutException {
        //创建消费端链接
        Connection connection = ConnectionUtils.getConnection();
        //创建消费端渠道
        Channel channel = connection.createChannel();
        //声明消费队列
        channel.queueDeclare(Producer.QUEUE_NAME, true,false,false,null);

        //监听消息
        DefaultConsumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

                System.out.println("路由的key为:"+envelope.getRoutingKey());
                System.out.println("交换机为:"+envelope.getExchange());
                System.out.println("消息ID为:"+envelope.getDeliveryTag());
                System.out.println("收到的消息为:"+new String(body,"UTF-8"));
                System.out.println("=====================================");
            }
        };

        /**
         * 第二个参数表示是否 向mqserver自动回复收到
         * 第三个参数表示消息回调
         */
        channel.basicConsume(Producer.QUEUE_NAME,true,consumer);
        //这里不关闭资源
    }


}

 

你可能感兴趣的:(RabbitMQ)