章のRabbitMQのJavaコードを使用RabbitMQの

最後の章では、RabbitMQのインストールについて話しました

この章では、RabbitMQの使用を説明します

 

まず、スタートのRabbitMQ

RabbitMQのサーバ- デタッチ

 

私は春直接使用する新しいJava springbootプロジェクトのinit

 

最初のステップ:

導入ポンポン依存ファイル

<依存> 
    <groupIdを> com.rabbitmq </ groupIdを> 
    <たartifactId> AMQPクライアント</たartifactId> 
    <バージョン> 5.8.0 </バージョン> 
</依存関係>

 

ステップ2:消費者と生産終了を作成します。

消費者側:

public class Consumer0 {


    /**
     * 创建交换机
     *
     * 创建队列
     *
     * 将队列与交换机绑定
     *
     * 定义自己的消费方法
     *
     *进行监听
     * @param args
     * @throws IOException
     * @throws TimeoutException
     */
    public static void main(String[] args) throws IOException, TimeoutException {
        //队列的名字
        String queueName = "stu01queue";
        //交换机的名字
        String exchangeName = "stu01exchange";

        //1:创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setPort(5672);
        connectionFactory.setHost("192.168.106.70");
        connectionFactory.setVirtualHost("/");
        Connection connection = connectionFactory.newConnection();

        //2:获取channel
        Channel channel = connection.createChannel();

        /**
         * 3:定义exchange
         * 参数分别为:
         * exchange名字
         * exchange类型
         * 是否持久化
         * 自动删除?
         * 自定义参数
         */
        channel.exchangeDeclare(exchangeName, "topic", true, true, null);

        /**
         * 4:
         * 定义queue
         *
         * 参数分别为
         * 名字
         * 是否持久化
         * 是否顺序消费  只有我自己可以消费
         * 是否自动删除
         * 参数  拓展参数
         */
        channel.queueDeclare(queueName, true, false, false, null);

        /**
         * 5:
         * 将队列绑定到exchange
         */
        channel.queueBind(queueName, exchangeName, "stu0");

        //6:进行消费
        channel.basicConsume(queueName,true,new MyConsumer0(channel));
    }


}

 

生産面:

public class Produce0 {

    public static String exchangeName =  "stu01exchange";


    /**
     * 将消息发送到对应的交换机
     *
     * 发送的时候指定routingkey
     *
     * 这样 当消费者监听的队列绑定的是这个routingkey 就可以接受到消息
     *
     *
     * @param args
     * @throws IOException
     * @throws TimeoutException
     */
    public static void main(String[] args) throws IOException, TimeoutException {
        //工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.106.70");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");

        //链接
        Connection connection = connectionFactory.newConnection();
        //获取channel
        Channel channel = connection.createChannel();
        //创建要发送的数据
        String[] strs = {"迪丽热巴", "古力娜扎"};
        //将数组数据循环发送
        Arrays.stream(strs).forEach(e -> {
            try {
                channel.basicPublish(exchangeName, "stu0", null, e.getBytes());
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });

        String sendMsg = "Hello Rabbit";
        channel.basicPublish(exchangeName, "stu0", null, sendMsg.getBytes());

        channel.close();
        connection.close();
    }


}

カスタムメッセージの受信方法:

public class MyConsumer0 extends DefaultConsumer {
    /**
     * Constructs a new instance and records its association to the passed-in channel.
     *
     * @param channel the channel to which this consumer is attached
     */
    public MyConsumer0(Channel channel) {
        super(channel);
    }

    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

        System.out.println("-----------consume message----------");
        System.out.println("consumerTag: " + consumerTag);
        System.out.println("envelope: " + envelope);
        System.out.println("properties: " + properties);
        System.out.println("body: " + new String(body));

    }
}

デモの種類を完了するために、このようなシンプルなトピック

[スタート]消費者 - >スタートアッププロデューサー

コンソールに成功している見ることができます

 

ここでは上記のコードではいくつかの値を説明します。

耐久性:永続データを保存するかどうかであるかどうか

自動削除:自動的に削除するかどうか、キューが削除されてバインドされた後、現在の為替た場合に自動的に削除?

引数:カスタムパラメータを送信します

 

交換の方法がありますトピックです

実際には、直接およびファンアウトがあります

モード、トピック、および結合操作コード

routingKeyトピックの結合は、結合のような、曖昧であることができます   

試験#平均試験。(*)(*)が複数の値にルーティングされます

テスト。*代表的なテスト。(*)が値にルーティングされます

 

モードがダイレクトモードである場合にのみroutingKeyただ直接の対応をルーティングすることができています

モードはファンアウトブロードキャストモードに似ている場合は、すべてのリスナーは、Exchangeにルーティングされます

 

実際には、上記のステップから見て難しいことではありませんが、三段階であります

1:交換を定義します   

2に定義されたキュー

3キューと交換バインド

 

コードは実際のキュー・モニター・消費者側であります

Routingkey生産と送信データに端末交換及び伝送の指定時間

例えばroutingkeyて送信はtestRoutingKeyです

リスナーの消費者側に結合キューと交流関係があることを起こるときroutingkeyがルーティングされます

これらは、簡単な方法詳細な説明では私の自由意志のspringboot簡単なデモ続く使用されています

公開された12元の記事 ウォンの賞賛0 ビュー429

おすすめ

転載: blog.csdn.net/qq_34225210/article/details/104525799