热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

java远程连接调用Rabbitmq的实例代码

本文介绍了java远程连接调用Rabbitmq,分享给大家,希望此文章对各位有所帮助。 打开IDEA创建一个maven工程(Java就

本文介绍了java远程连接调用Rabbitmq,分享给大家,希望此文章对各位有所帮助。

打开IDEA创建一个maven工程(Java就可以了)。

这里写图片描述 

pom.xml文件如下


 4.0.0

 com.zhenqi
 rabbitmq-study
 1.0-SNAPSHOT
 jar

 rabbitmq-study
 http://maven.apache.org

 
  UTF-8
 

 
  
   junit
   junit
   4.12
   test
  

  
  
   com.rabbitmq
   amqp-client
   4.1.0
   
    
     org.slf4j
     slf4j-api
    
   
  

  
   org.slf4j
   slf4j-log4j12
   1.7.21
  

  
   commons-lang
   commons-lang
   2.6
  

 


为了能远程访问rabbitmq,则需要编辑 /etc/rabbitmq/rabbitmq.conf,添加以下内容。

[
  {rabbit, [{tcp_listeners, [5672]}, {loopback_users, ["asdf"]}]}
 ]

添加administrator角色

rabbitmqctl set_user_tags openstack administrator

创建抽象队列 EndPoint.java

package com.zhenqi;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;


/**
 * Created by wuming on 2017/7/16.
 */
public abstract class EndPoint {

  protected Channel channel;
  protected Connection connection;
  protected String endPointName;

  public EndPoint(String endpointName) throws Exception {

    this.endPointName = endpointName;

    //创建一个连接工厂 connection factory
    ConnectionFactory factory = new ConnectionFactory();

    //设置rabbitmq-server服务IP地址
    factory.setHost("192.168.146.128");
    factory.setUsername("openstack");
    factory.setPassword("rabbitmq");
    factory.setPort(5672);
    factory.setVirtualHost("/");

    //得到 连接
    cOnnection= factory.newConnection();

    //创建 channel实例
    channel = connection.createChannel();

    channel.queueDeclare(endpointName, false, false, false, null);
  }

  /**
   * 关闭channel和connection。并非必须,因为隐含是自动调用的。
   * @throws IOException
   */
  public void close() throws Exception{
    this.channel.close();
    this.connection.close();
  }
}

生产者Producer.java

生产者类的任务是向队列里写一条消息

package com.zhenqi;

import org.apache.commons.lang.SerializationUtils;

import java.io.Serializable;

/**
 * Created by wuming on 2017/7/16.
 */
public class Producer extends EndPoint {

  public Producer(String endpointName) throws Exception {
    super(endpointName);
  }

  public void sendMessage(Serializable object) throws Exception {
    channel.basicPublish("",endPointName, null, SerializationUtils.serialize(object));
  }
}

消费者QueueConsumer.java

消费者可以以线程方式运行,对于不同的事件有不同的回调函数,其中最主要的是处理新消息到来的事件。

package com.zhenqi;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;
import org.apache.commons.lang.SerializationUtils;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by wuming on 2017/7/16.
 */
public class QueueConsumer extends EndPoint implements Runnable, Consumer {

  private Logger LOG=Logger.getLogger(QueueConsumer.class);

  public QueueConsumer(String endpointName) throws Exception {
    super(endpointName);
  }

  public void handleConsumeOk(String s) {

  }

  public void handleCancelOk(String s) {

  }

  public void handleCancel(String s) throws IOException {

  }

  public void handleShutdownSignal(String s, ShutdownSignalException e) {

  }

  public void handleRecoverOk(String s) {
    LOG.info("Consumer "+s +" registered");
  }

  public void handleDelivery(String s, Envelope envelope, AMQP.BasicProperties basicProperties, byte[] bytes) throws IOException {
    Map map = (HashMap) SerializationUtils.deserialize(bytes);
    LOG.info("Message Number "+ map.get("message number") + " received.");
  }

  public void run() {
    try{
      channel.basicConsume(endPointName, true,this);
    }catch(IOException e){
      e.printStackTrace();
    }
  }
}

 测试

运行一个消费者线程,然后开始产生大量的消息,这些消息会被消费者取走

package com.zhenqi;

import java.util.HashMap;

/**
 * Created by wuming on 2017/7/16.
 */
public class TestRabbitmq {

  public static void main(String[] args){
    try{
      QueueConsumer cOnsumer= new QueueConsumer("queue");
      Thread cOnsumerThread= new Thread(consumer);
      consumerThread.start();

      Producer producer = new Producer("queue");

      for (int i = 0; i <100000; i++){
        HashMap message = new HashMap();
        message.put("message number", i);
        producer.sendMessage(message);
        System.out.println("Message Number "+ i +" sent.");
      }
    }catch(Exception e){
      e.printStackTrace();
    }

  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Eclipse 中 Maven 的基础配置指南
    本文详细介绍了如何在 Eclipse 环境中配置 Maven,包括环境变量的设置、Maven 插件的安装与配置等关键步骤,旨在帮助开发者顺利搭建开发环境。 ... [详细]
  • Spring Boot + MyBatis Plus 实现SQL语句打印的两种方法
    本文详细介绍了如何在Spring Boot和MyBatis Plus环境中实现SQL语句打印的两种方法,包括配置文件设置和多数据源环境下的动态配置。适合开发者在日常开发和调试过程中参考。 ... [详细]
  • 本文详细介绍了如何在Spring Boot项目中配置Maven的pom.xml文件,包括项目的基本信息、依赖管理及构建插件的设置。 ... [详细]
  • 本文将指导您如何在MyEclipse 6.0.1环境中手动搭建Struts 2框架,并实现一个简单的用户登录功能。通过本文,您将了解如何解决开发过程中可能遇到的一些常见问题。 ... [详细]
  • Pikachu SQL注入实战解析
    作为一名网络安全新手,本文旨在记录个人在SQL注入方面的学习过程与心得,以备后续复习之用。通过逐步深入的学习,力求掌握每个知识点后再向下一个挑战迈进。 ... [详细]
  • 本文详细介绍了如何配置Apache Flume与Spark Streaming,实现高效的数据传输。文中提供了两种集成方案,旨在帮助用户根据具体需求选择最合适的配置方法。 ... [详细]
  • JSP服务器概述及搭建指南
    本文详细介绍了JSP服务器的概念、主流服务器软件及其搭建步骤,旨在帮助开发者更好地理解和使用JSP技术。 ... [详细]
  • 本文介绍了Java Web应用中的资源重定向和请求转发机制,包括默认欢迎资源文件的设置方法,以及多个Servlet之间的调用规则和数据共享方案。 ... [详细]
  • 随着毕业设计的结束,我终于有时间更新我的博客了。这次,我将分享如何在自己的服务器上搭建 Bitwarden,一个广受好评的开源密码管理工具。 ... [详细]
  • 深入解析Apache SkyWalking CVE-2020-9483 SQL注入漏洞
    本文详细探讨了Apache SkyWalking中的SQL注入漏洞(CVE-2020-9483),特别是其影响范围、漏洞原因及修复方法。Apache SkyWalking是一款强大的应用性能管理工具,广泛应用于微服务架构中。然而,该漏洞使得未经授权的攻击者能够通过特定的GraphQL接口执行恶意SQL查询,从而获取敏感信息。 ... [详细]
  • 本文介绍了如何在Ubuntu 16.04系统上配置Nginx服务器,以便能够通过网络访问存储在服务器上的图片资源。这解决了在网页开发中需要使用自定义在线图标的需求。 ... [详细]
  • Zookeeper面试常见问题解析
    本文详细介绍了Zookeeper中的ZAB协议、节点类型、ACL权限控制机制、角色分工、工作状态、Watch机制、常用客户端、分布式锁实现、默认通信框架以及消息广播和领导选举的流程。 ... [详细]
  • 目录介绍01.CoordinatorLayout滑动抖动问题描述02.滑动抖动问题分析03.自定义AppBarLayout.Behavior说明04.CoordinatorLayo ... [详细]
  • Linux环境下Redmine快速搭建指南
    本文将详细介绍如何在Linux操作系统中使用Bitnami Redmine安装包快速搭建Redmine项目管理平台,帮助读者轻松完成环境配置。 ... [详细]
  • MySQL中的Anemometer使用指南
    本文详细介绍了如何在MySQL环境中部署和使用Anemometer,以帮助开发者有效监控和优化慢查询性能。通过本文,您将了解从环境准备到具体配置的全过程。 ... [详细]
author-avatar
嘿可爱无罪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有