Cat 跨线程之 TaggedTransaction 用法和原理分析
代码
package com.dianping.cat.message.internal; import com.dianping.cat.Cat; import com.dianping.cat.message.Message; import com.dianping.cat.message.Transaction; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.unidal.helper.Threads; import java.io.File; import java.util.concurrent.TimeUnit; public class MultiThreadingTest { @After public void after() { } @Before public void before() { Cat.initialize(new File("/data/appdatas/cat/client.xml")); } @Test public void testTaggedTransaction() throws Exception { Transaction t = Cat.newTransaction("TaggedRoot", "Root"); Cat.newTaggedTransaction("TaggedChild", "Child1", "Tag1"); Threads.forGroup().start(new TaggedThread(100, "Tag1")); TimeUnit.MILLISECONDS.sleep(200); t.setStatus(Message.SUCCESS); t.complete(); } static class TaggedThread extends Thread { private int m_timeout; private String m_tag; public TaggedThread(int timeout, String tag) { m_timeout = timeout; m_tag = tag; } @Override public void run() { Transaction t = Cat.newTransaction("TaggedThread", m_tag); try { TimeUnit.MILLISECONDS.sleep(m_timeout); t.setStatus(Message.SUCCESS); Cat.getManager().bind(m_tag, "Child Tagged Thread"); } catch (Exception e) { Cat.logError(e); t.setStatus(e); } finally { t.complete(); } } } }
模型图
源码分析