• rabbitmq direct、fanout、topic 三种Exchange java 代码比较


    Producer端

    1、channel的创建

      无论是才用什么样的Exchange,创建channel代码都是相同的,如下  

    1 ConnectionFactory factory = new ConnectionFactory();
    2 factory.setHost("localhost");
    3 Connection connection = factory.newConnection();
    4 Channel channel = connection.createChannel();

    2、Exchange的创建

     2.1 direct

      direct使用默认的Exchange,不需要声明,单需要指定消息发送到那个队列

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);

     2.2 fanout

    channel.exchangeDeclare(EXCHANGE_NAME, "fanout")

     2.3 topic如下

    channel.exchangeDeclare(EXCHANGE_NAME, "topic");

    3、消息的发送

      3.1 direct

    channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

      3.2 fanout 

    channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());

      3.3 topic

    channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes());

     

    cusumer端

    1、创建channel 

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    2、消息前的准备

       2.1  direct直接绑定队列进行消息的消费        

    chanel.queueDeclare(QUEUE_NAME, false, false, false, null);

       2.2 fanout,需要先指定exchange类型为fanout 

    channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
    String queueName = channel.queueDeclare().getQueue();
    channel.queueBind(queueName, EXCHANGE_NAME, "");

      2.3 topic       

    channel.exchangeDeclare(EXCHANGE_NAME, "topic");
    String queueName = channel.queueDeclare().getQueue();
     for(String bindingKey : argv){
          channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);
     }

    3、具体消费消息的代码是一样的

         

    QueueingConsumer consumer = new QueueingConsumer(channel);
    channel.basicConsume(QUEUE_NAME, true, consumer);
    while (true) {
        QueueingConsumer.Delivery delivery = consumer.nextDelivery();
        Envelope elp = delivery.getEnvelope();
        String message = new String(delivery.getBody());
        System.out.println(" [x] Received '" + message + "'");
        channel.basicAck(elp.getDeliveryTag(), false);
        //channel.basicNack();
    ​}

           

  • 相关阅读:
    oracle判断是否包含字符串的方法
    linux环境下卸载mysql
    分辨率与px的关系
    plsql登录,tables表为空解决方案
    excle导出、导入、下载_jeesite注解@ExcelField
    安卓中常用的弹出框
    c#将数据导出到excel中
    将表里的数据分组,并取每组中的最大的一条数据
    c#如何写服务,打包和卸载服务
    C#排列组合类,写彩票算法的朋友们可以来看一看
  • 原文地址:https://www.cnblogs.com/piaolingzxh/p/5448757.html
Copyright © 2020-2023  润新知