设为首页收藏本站

河南工业大学论坛|工大小窝|河南工业大学BBS|惜缘论坛|2006-2021工大小窝一直在你身边!

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 842|回复: 0
打印 上一主题 下一主题

Java获取php端放入rabbitmq内的音讯

[复制链接]
跳转到指定楼层
1
发表于 2014-11-25 16:48:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
背景:项目中一个场景需要用java端的处置代码获取php端放到rabbitmq内的音讯,然后做相应业务的处置。
  条件:rabbitmq服务器已经搭建好,php端的音讯发布正常运转。
  首要:下载rabbitmq-client对应的java版jar包(spring如同有相应的支持)
  开端代码coding的作业,上代码
  package com.eelly.imagesearch.common;
  import com.rabbitmq.client.Channel;
  import com.rabbitmq.client.Connection;
  import com.rabbitmq.client.ConnectionFactory;
  import com.rabbitmq.client.GetResponse;
  public class RabbitMqControll {
  /**
  * 读取RabbitMq中的存储信息
  *
  * @param queue_name 行列名
  * @param exchange_name 交流机名
  * @param route_key 绑定用到的route_key
  * @param durable 是不是耐久化
  */
  public void readRabbitMqInfo (String queue_name,
  String exchange_name, String route_key, boolean durable)
  {
  ConnectionFactory factory = new ConnectionFactory();
  // 设置服务器ip
  factory.setHost("172.18.107.66");
  // 设置rabbitmq服务器运转的端口
  factory.setPort(5672);
  // 设置rabbitmq服务器衔接用户
  factory.setUsername("guest");
  // 设置rabbitmq服务器衔接用户暗码
  factory.setPassword("guest");
  // 设置rabbitmq服务器节点目录(自己理解)
  factory.setVirtualHost("/");
  try {
  // 创立工厂衔接
  Connection connection = factory.newConnection();
  // 创立通道
  Channel channel = connection.createChannel();
  // 声明交流机(设置有关特点时需要和php端的共同)
  channel.exchangeDeclare(exchange_name, "direct", durable);
  // 声明音讯行列(设置有关特点时需要和php端的共同)
  channel.queueDeclare(queue_name, durable, false, true, null);
  // 绑定音讯行列(设置有关特点时需要和php端的共同)
  channel.queueBind(queue_name, exchange_name, route_key);
  System.out.println("
  • Waiting for messages. To exit press CTRL+C");
      // basicConsume花费形式
      /*channel.basicQos(1);//音讯分发处置
      QueueingConsumer consumer = new QueueingConsumer(channel);
      channel.basicConsume(queue_name, false, consumer);
      while (true) {
      QueueingConsumer.Delivery delivery = consumer.nextDelivery();
      String message = new String(delivery.getBody());
      System.out.println(" [x] Received '" + message + "'");
      // 提交音讯处置完结回复
      channel.basicAck(delivery.getEnvelope()。getDeliveryTag(), false);
      }*/
      // basicGet花费形式
      while (true)
      {
      // get方法主动花费
      GetResponse res=channel.basicGet(queue_name, false);
      if (res != null && res.getMessageCount() >= 0)
      {
      System.out.println(res.getMessageCount());
      String message = "";
      message = new String(res.getBody());
      channel.basicAck(res.getEnvelope()。getDeliveryTag(), false);
      System.out.println(" [x] Received '" + message + "'");
      }
      else
      {
      System.out.println("音讯行列中没有可花费的信息!");
      break;
      }
      }
      channel.close();
      connection.close();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }
      }
      在开发的过程中,首要报的异常是:
      1.创立交流机和音讯行列时,设置的特点和音讯产生端的php代码设置的不一样,致使不匹配和一向重写特点
      2.在调用时一向没有断定到底是用basicConsume的花费形式仍是basicGet花费形式(前者带有监控作用,后者没有,不知道是不是由于一者有跳出while循环,一者没有的原因)>>
    http://java.chinatarena.com
    http://android.chinatarena.com
    http://ios.chinatarena.com
    http://php.chinatarena.com
    http://test.chinatarena.com
    http://net.chinatarena.com
    http://www.chinatarena.com
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏 分享分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|小黑屋|Archiver|手机版|联系我们|工大小窝 ( 豫ICP备06010094号  

    GMT+8, 2024-5-3 13:42 , Processed in 0.138170 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表