一个简单的java程序,用于RabbitMQ日志监控
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日志监控的更多相关文章
- Java入门篇(一)——如何编写一个简单的Java程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
- Linux环境下部署完JDK后运行一个简单的Java程序
前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...
- 一个简单的Java程序例子以及其几种注释
在说道主题前,先来啰嗦两句,o()︿︶)o 唉,不说两句心里就有个疙瘩,也许这就是所谓的强迫症吧,好了说说我想啰嗦的,其实也就是这样子的,关于Java开发工具箱的下载以及环境的配置.Java开发工具箱 ...
- 一个简单的Java程序
一个.NET技术还是很菜的水平的猿人现在要去学习Java不知道是坏是好,无从得知啊! 不过在网上看了好多Java方面的简单例子,感觉Java还是蛮不错的么!不管以后怎么样啦,先开始自己的Java菜鸟之 ...
- java基础学习02(简单的java程序)
简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...
- Java学习笔记 11/15:一个简单的JAVA例子
首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java // TestJava.java,java 的简单范例 public ...
- 编写运行最简单的java程序——使用记事本编写java程序
第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. ...
- 如何使用eclipse运行简单的java程序
打开eclipse,选择“file——new——Java project” 为我们的java项目取一个名字,然后点击完成. 这时候左侧列表就有了我们刚才新建的java项目,点开项目,在src目 ...
- 【Java】一个简单的Java应用程序
简单记录,Java 核心技术卷I 基础知识(原书第10 版) 一个简单的Java应用程序"Hello, World!" Hello, World! Goodbye,World! 一 ...
随机推荐
- fiddler抓不到chrome浏览器的请求
今天遇到一个非常尴尬的问题,接口在某种情况下会报错,此时前端会展示NAN之类的东西,由于复现不了,接口现在一直不报 错了,所以就让前端做了个友好提示, 当接口报错时,给个提示“请稍后重试” ,我要测试 ...
- 【官方下载】EasyCMDB官方基础版免费下载使用!
链接
- VS2017 MVC Spring net 环境配置
首先打开管理NuGet程序包. 搜索 "spring web",安装Spring.Web,Spring.Web.Mvc5,Spring.Web.Extensions, 搜索Micr ...
- 【ybt1252】走迷宫
(还是蛮经典的一道bfs) 显然算法bfs [传送门] 算法基本上算是bfs的模板了,(模板详见[新知识]队列&bfs[洛谷p1996约瑟夫问题&洛谷p1451求细胞数量]) #inc ...
- 修改 input / textarea placeholder 属性的颜色和字体大小
话不多说,直接上代码: input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #666; fon ...
- licode测试
https://github.com/lynckia/licode/tree/master/test 使用js模拟客户端调用,也可以使用mocha来进行同样的测试
- django模型系统(一)
django模型系统(一) djangode ORM ORM:对像关系映射 用python概念去表达数据库 数据库配置(mysql) 安装pumysql 修改项目目录下的__init__.py imp ...
- c# .net core 设置缓存
1.开启ResponseCaching的缓存(ResponseCaching相当于老版本的OutPutCache): 在Startup.cs文件中设置: public void ConfigureSe ...
- China MVP Community Connection 2017
在微软北京和小朋友们参加编程一小时活动
- ClientDataSet使用locate或Filter定位到字段为空值的记录
场景,程序想检查是否存在某个字段的值是空的,如果存在,则不允许增加记录,否则允许增加记录. 解决这个问题,我一开始用了两种错误的方法 if not clientdataset.locate('AFie ...