RabbitMQ的所有日志,都会发给topic类型的exchange “amq.rabbitmq.log”  routingKey 有 debug,info,waring,error.  如果接收所有类型日志,可以用 #

package logs;

import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties; import utils.ChannelUtils; public class ListenerRabbitMQLogs { private static final String QUEUE_NAME_DEBUG = "queue_debug";
private static final String QUEUE_NAME_INFO = "queue_info";
private static final String QUEUE_NAME_WARNING = "queue_warning";
private static final String QUEUE_NAME_ERROR = "queue_error"; private static final String EXCHANGE_NAME_LOG = "amq.rabbitmq.log"; public static void main(String[] args) throws IOException, TimeoutException { Connection connection = ChannelUtils.getConnection("ListenerLog"); Channel channelDebug = connection.createChannel();
Channel channelInfo = connection.createChannel();
Channel channelWarning = connection.createChannel();
Channel channelError = connection.createChannel(); channelDebug.queueDelete(QUEUE_NAME_DEBUG);
channelDebug.queueDeclare(QUEUE_NAME_DEBUG, false, false, false, null); channelInfo.queueDelete(QUEUE_NAME_INFO);
channelInfo.queueDeclare(QUEUE_NAME_INFO, false, false, false, null); channelWarning.queueDelete(QUEUE_NAME_WARNING);
channelWarning.queueDeclare(QUEUE_NAME_WARNING, false, false, false, null); channelError.queueDelete(QUEUE_NAME_ERROR);
channelError.queueDeclare(QUEUE_NAME_ERROR, false, false, false, null); channelDebug.queueBind(QUEUE_NAME_DEBUG, EXCHANGE_NAME_LOG, "debug");
channelInfo.queueBind(QUEUE_NAME_INFO, EXCHANGE_NAME_LOG, "info");
channelWarning.queueBind(QUEUE_NAME_WARNING, EXCHANGE_NAME_LOG, "warning");
channelError.queueBind(QUEUE_NAME_ERROR, EXCHANGE_NAME_LOG, "error"); channelDebug.basicConsume(QUEUE_NAME_DEBUG, new LogsConsumer(channelDebug,"Debug"));
channelInfo.basicConsume(QUEUE_NAME_INFO, new LogsConsumer(channelInfo,"Info"));
channelWarning.basicConsume(QUEUE_NAME_WARNING, new LogsConsumer(channelWarning,"Warning"));
channelError.basicConsume(QUEUE_NAME_ERROR, new LogsConsumer(channelError,"Error")); } } class LogsConsumer extends DefaultConsumer { private String logLevel; public LogsConsumer(Channel channel,String logLevel) {
super(channel);
this.logLevel = logLevel;
} @Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException { System.out.println(logLevel+":"+new String(body)); // 使用手动确认模式,这里需要确认收到消息。
getChannel().basicAck(envelope.getDeliveryTag(), false);
} }
package utils;

import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; public class ChannelUtils { public static Channel getChannelInstance(String ConnectionDescription) {
try {
return getConnection(ConnectionDescription).createChannel();
} catch (Exception e) {
throw new RuntimeException("获取Channel连接失败");
}
} public static Connection getConnection(String ConnectionDescription) throws IOException, TimeoutException {
ConnectionFactory connectionFactory = getConnectionFactory();
return connectionFactory.newConnection(ConnectionDescription);
} public static ConnectionFactory getConnectionFactory() {
ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setHost("192.168.1.111");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("drs");
connectionFactory.setPassword("123456"); return connectionFactory;
} }

一个简单的java程序,用于RabbitMQ日志监控的更多相关文章

  1. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  2. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  3. 一个简单的Java程序例子以及其几种注释

    在说道主题前,先来啰嗦两句,o()︿︶)o 唉,不说两句心里就有个疙瘩,也许这就是所谓的强迫症吧,好了说说我想啰嗦的,其实也就是这样子的,关于Java开发工具箱的下载以及环境的配置.Java开发工具箱 ...

  4. 一个简单的Java程序

    一个.NET技术还是很菜的水平的猿人现在要去学习Java不知道是坏是好,无从得知啊! 不过在网上看了好多Java方面的简单例子,感觉Java还是蛮不错的么!不管以后怎么样啦,先开始自己的Java菜鸟之 ...

  5. java基础学习02(简单的java程序)

    简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...

  6. Java学习笔记 11/15:一个简单的JAVA例子

    首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java   // TestJava.java,java 的简单范例  public ...

  7. 编写运行最简单的java程序——使用记事本编写java程序

    第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. ...

  8. 如何使用eclipse运行简单的java程序

    打开eclipse,选择“file——new——Java project”   为我们的java项目取一个名字,然后点击完成.   这时候左侧列表就有了我们刚才新建的java项目,点开项目,在src目 ...

  9. 【Java】一个简单的Java应用程序

    简单记录,Java 核心技术卷I 基础知识(原书第10 版) 一个简单的Java应用程序"Hello, World!" Hello, World! Goodbye,World! 一 ...

随机推荐

  1. How to view the DNS address assigned by DHCP

    nmcli connection show clear-corporate | grep IP4 IP4.ADDRESS[1]:                         101.8.112.9 ...

  2. introduce explaining variable 引入解释变量

    一段复杂的计算的表达式(一般 逻辑判断  if(a!=1 && b!=Null && a>b  ) && .... 直接在代码中参与到 代码的逻辑 ...

  3. WSGI协议主要包括server和application两部分:

    WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端:WSGI application接收由server ...

  4. zoj3223

    其实这题不超时完全是因为串长度太小,如果串够长,一次匹配后都要往上跳,复杂度是n^2的. #include <iostream> #include <cstdio> #incl ...

  5. Java+selenium+feeder+AutoIt+自动加载插件

    package dataproject.datapro; import static org.testng.Assert.assertEqualsNoOrder; import java.io.Fil ...

  6. 蓝桥杯第九届省赛 sscanf(),str.c_str()函数的使用

    标题:航班时间 [问题背景]小h前往美国参加了蓝桥杯国际赛.小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”. 小h对超音速飞行感到十分恐惧.仔 ...

  7. 判断PDF文件是否相同(通过二进制流判断)

    一.Java代码 1.将PDF转为字节流    /*     * @step     *  1.使用BufferedInputStream和FileInputStream从File指定的文件中读取内容 ...

  8. WCF:一个棘手的问题

    前言 在做即时通信项目时,手上另一个项目的颠簸,即时通信项目一直是改改停停的,一些改动比较小,没有即时的签入,然后一段时间本地的项目代码与源代码存在不少区别,在这种情况下,因为新的需求添加,需要给WC ...

  9. 5、继承(extends)

    继承主要目的是提高代码的复用性,但是只有在类与类之间有所属关系的时候才能继承,不能为了获取其他类的功能而继承,Java中只有单继承,不支持多继承,但可以多层继承 当父类中定义了相同的功能,内容不同时, ...

  10. IPFS扫盲

    第二届深圳区块链技术与应用大会暨展览会,深圳区块链存储与IPFS技术应用大会暨展览会于2019年4月9日在深圳会展中心6号馆举行.那么这个IPFS是什么?和区块链有什么关系?有什么用?又怎么用呢?接下 ...