前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMQ 学习(三)---- 连接工具类

RabbitMQ 学习(三)---- 连接工具类

作者头像
RAIN7
发布2022-09-29 11:16:02
7040
发布2022-09-29 11:16:02
举报
文章被收录于专栏:RAIN7 de 编程之路

文章目录

RabbitMQ 学习(三)---- 连接工具类

  之前我们写生产者消费者模型的时候,会有很多冗余代码,比如生产者和消费者都需要创建连接工厂、设置连接配置、以及关闭资源等操作。

  我们打算将这些冗余的操作封装成一个工具类,我们直接调用类得到相关的信息即可,不必每次都写一些连接的配置信息。

工具类完整代码

  使用连接工厂,使用单例模式,static只设置一次配置,创建获取连接的方法,创建关闭资源的方法

代码语言:javascript
复制
package utils;

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 RabbitMQUtils {

    // 单例模式--懒汉式,类加载的时候在去创建实例
    private static ConnectionFactory connectionFactory;

    // 静态的资源属性只需要赋值一次
    static{
        connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("120.46.143.156"); // 部署rabbitMQ的
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/test");
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("123456");
    }

    // 定义提供连接对象的方法
    public static Connection getConnect(){
        try {
            return connectionFactory.newConnection();
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    // 定义关闭资源的方法
    public static void close(Channel channel,Connection connection){
        if(channel!=null){
            try {
                channel.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
        }

        if(connection!=null){
            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

  所以现在,在之前的生产者、消费者Hello World 模型的代码中可以省略很多代码了

生产者完整代码

代码语言:javascript
复制
package utils;

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 RabbitMQUtils {

    // 单例模式--懒汉式,类加载的时候在去创建实例
    private static ConnectionFactory connectionFactory;

    // 静态的资源属性只需要赋值一次
    static{
        connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("120.46.143.156"); // 部署rabbitMQ的
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/test");
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("123456");
    }

    // 定义提供连接对象的方法
    public static Connection getConnect(){
        try {
            return connectionFactory.newConnection();
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    // 定义关闭资源的方法
    public static void close(Channel channel,Connection connection){
        if(channel!=null){
            try {
                channel.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
        }

        if(connection!=null){
            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

消费者完整代码

代码语言:javascript
复制
package test;

import com.rabbitmq.client.*;
import utils.RabbitMQUtils;

import java.io.IOException;

public class Customer1 {

    public static void main(String[] args) {
        Connection connect = RabbitMQUtils.getConnect();

        try {
            //1、获取信道
            assert connect != null;
            Channel channel = connect.createChannel();

            //2、声明队列,与生产者队列保持一致
            channel.queueDeclare("hello", false, false, false, null);

            //3、使用队列 接收消息
            channel.basicConsume("hello", false, new DefaultConsumer(channel){
                // 接受完消息之后执行回调函数,执行后续的业务
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println(new String(body));
                }
            });

            // 4、 不用关闭资源,否则可能接收完参数还未等执行完业务操作,线程结束了

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • RabbitMQ 学习(三)---- 连接工具类
    • 工具类完整代码
      • 生产者完整代码
        • 消费者完整代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档