package com.example.rabbit;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import javassist.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author xianmingyuan
*/
public class RabbitApplication {
public static void main(String[] args) throws NotFoundException, CannotCompileException, IOException, TimeoutException {
modifyChannelNClass();
sendMsg();
}
private static void sendMsg() throws IOException, TimeoutException {
String exchangeName = "test";
String rk = "test";
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("*.*.*.*");
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String message = "RabbitMQ Demo Test:" + System.currentTimeMillis();
channel.basicPublish(exchangeName, rk, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
channel.close();
connection.close();
}
private static void modifyChannelNClass() throws NotFoundException, CannotCompileException {
ClassPool pool = ClassPool.getDefault();
pool.importPackage("org.slf4j.Logger");
pool.importPackage("org.slf4j.LoggerFactory");
pool.importPackage("com.rabbitmq.client.impl.ChannelN");
CtClass ctClass = pool.get("com.rabbitmq.client.impl.ChannelN");
// 添加log字段
CtField f = CtField.make("private static final Logger log = LoggerFactory.getLogger(ChannelN.class);", ctClass);
ctClass.addField(f);
// 修改方法
CtClass[] params = new CtClass[6];
params[0] = pool.get("java.lang.String");
params[1] = pool.get("java.lang.String");
params[2] = pool.get("boolean");
params[3] = pool.get("boolean");
params[4] = pool.get("com.rabbitmq.client.AMQP$BasicProperties");
params[5] = pool.get("byte[]");
CtMethod basicPublish = ctClass.getDeclaredMethod("basicPublish", params);
basicPublish.setBody(basicPublish, null);
basicPublish.insertBefore("{" +
"log.info(\"exchange = [{}], routingKey = [{}]\", $1, $2);" +
"}");
// 重新加载
ctClass.toClass();
}
}
javasist埋点
最新推荐文章于 2025-04-15 16:44:35 发布