Javaはrabbitmqシンプルキューモデル、プロデューサーコンシューマーメッセージキューを実装します

プロデューサーはキューにメッセージを送信し、ランダムなコンシューマーはキューからメッセージを受信します
ここに画像の説明を挿入

  1. ユーザーと仮想ホストを作成する

rabbitmqが提供するユーザー管理インターフェースを介してユーザーと仮想ホストを簡単に作成でき、ユーザーを対応する仮想ホストにバインドする必要があります。独自のguestユーザーと/仮想ホストを使用して、これら2つの既存の情報を直接使用することもできます。wuwluserという名前の/vh仮想ホストを作成しました/仮想ホストはで始まる必要があることに注意してください
ここに画像の説明を挿入

  1. 依存関係をインポートする
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.10.0</version>
</dependency>
  1. ConnectionUtilsがツールクラスと見なされ、プロデューサーとコンシューマーの両方がオブジェクトを接続する必要がある接続を作成します
public class ConnectionUtils {
    
    
    public static Connection getConnection() throws IOException, TimeoutException {
    
    
        // 创建连接mq的连接工厂对象
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置连接rabbitmq主机
        connectionFactory.setHost("192.168.20.128");
        // 设置端口号
        connectionFactory.setPort(5672);
        // 设置虚拟主机
        connectionFactory.setVirtualHost("/vh");
        // 设置用户名和密码
        connectionFactory.setUsername("wuwl");
        connectionFactory.setPassword("123456");

        // 获取连接对象
        return connectionFactory.newConnection();
    }
}
  1. プロデューサーを作成する
public class Provider {
    
    
    public void send() throws IOException, TimeoutException {
    
    
        Connection connection = null;
        Channel channel = null;
        try {
    
    
            connection = ConnectionUtils.getConnection();
            // 获取连接通道
            channel = connection.createChannel();

            /** 通道绑定对应的消息队列
             * 参数一:队列名称,如果队列不存在,自动创建队列
             * 参数二:定义队列是否持久化
             * 参数三:是否独占队列
             * 参数四:是否在消费完成后自动删除队列
             */
            channel.queueDeclare("wuwl",true,false,false,null);

            /**
             * 发布消息
             * 参数一: 交换机名称
             * 参数二:队列名称
             * 参数三:传递消息额外设置
             * 参数四:消息的具体内容
             */
            channel.basicPublish("","wuwl",null,"hello rabbitmq".getBytes());
        }finally {
    
    
            if (channel !=null && channel.isOpen()) {
    
    
                channel.close();
            }
            if (connection != null && connection.isOpen()) {
    
    
                connection.close();
            }
        }
    }

    public static void main(String[] args) throws IOException, TimeoutException {
    
    
        Provider provider = new Provider();
        provider.send();
    }
}
  1. コンシューマーを作成します。コンシューマーのチャネルと接続オブジェクトが閉じられていない場合、常に監視状態になります。プロデューサーのみが新しいメッセージをメッセージキューに送信し、コンシューマーはすぐにそれを消費します。
public class Consumer {
    
    
    public void consume() throws IOException, TimeoutException {
    
    
        Connection connection = null;
        Channel channel = null;
        try {
    
    
            connection = ConnectionUtils.getConnection();
            // 获取连接通道
            channel = connection.createChannel();

            /** 通道绑定对应的消息队列
             * 参数一:队列名称,如果队列不存在,自动创建队列
             * 参数二:定义队列是否持久化
             * 参数三:是否独占队列
             * 参数四:是否在消费完成后自动删除队列
             */
            channel.queueDeclare("wuwl", true, false, false, null);

            /**
             * 消费
             * 参数一: 交换机名称
             * 参数二:队列名称
             * 参数三:传递消息额外设置
             * 参数四:消息的具体内容
             */
            channel.basicConsume("wuwl",true,new DefaultConsumer(channel){
    
    
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
    
                    System.out.println("消费消息:" + new String(body));
                }
            });
        } finally {
    
    
//            if (channel != null && channel.isOpen()) {
    
    
//                channel.close();
//            }
//            if (connection != null && connection.isOpen()) {
    
    
//                connection.close();
//            }
        }
    }

    public static void main(String[] args) throws IOException, TimeoutException {
    
    
        Consumer consumer = new Consumer();
        consumer.consume();
    }

}


  1. プロデューサーのみをテスト実行すると、管理インターフェイスで定義したキューと、消費されていないメリットを確認できます。

ここに画像の説明を挿入
コンシューマーを開始した後、メッセージは消費され、継続的に監視されます

ここに画像の説明を挿入
このとき、キューで消費されるメッセージの数は0です。

ここに画像の説明を挿入
再度プロデューサーを介してメッセージキューにメッセージを送信します。コンシューマーは直接消費します。キューで消費されるメッセージの数は0です。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41885819/article/details/112862009