ActiveMQ Series - Overview
ActiveMQ is an open-source messaging middleware (Message-Oriented Middleware, MOM) under the Apache Software Foundation and a complete implementation of the JMS (Java Message Service) 1.1 specification. This article is the opening piece of the ActiveMQ series. We’ll first clarify what messaging middleware is and what problems it solves, then introduce the core concepts of JMS, laying a solid foundation for further exploration of ActiveMQ’s specific features. What Problems Does Messaging Mid...
Hexo Tutorial: Setting Up a Blog System and Deploying to GitHub
Original article: https://lichuanyang.top/posts/19890/ Hexo is an open-source blog system. For a backend developer who doesn’t want to deal with frontend stuff, but still finds platforms like CSDN and cnblogs inconvenient, and building your own blog from scratch is troublesome and ugly — I stumbled upon Hexo, which is extremely friendly for backend developers. So I’m writing this article to document the Hexo installation, some key configurations, and the process of deploying to GitHub. Instal...
Exporting JStorm Monitoring Metrics to Third-Party Storage
JStorm Metrics SystemJStorm’s UI provides a large number of very detailed monitoring parameters, which are extremely helpful for troubleshooting. For information about the UI, you can refer to my previous article: https://lichuanyang.top/posts/31996/. However, using the UI can sometimes be inconvenient, for example when you need to query historical data. Therefore, we want to export monitoring data to other storage media for easier subsequent querying and analysis. Since JStorm’s monitoring h...
Camel Series: Using Camel Debugger
Apache Camel is a powerful enterprise integration framework built on EIP (Enterprise Integration Patterns), with over 200 components that can easily connect various data sources and middleware. However, this power comes with a downside: the high level of encapsulation makes the underlying details opaque, and troubleshooting route problems can be very difficult. Fortunately, the Camel team provides a Debugger tool that allows you to set breakpoints at route nodes and inspect message content, j...
JStorm Source Code Analysis: Bolt Exception Handling
ProblemAnyone who has used Storm or JStorm knows that if an uncaught exception occurs in bolt code, the worker process will exit. This article analyzes the specific design from a source code perspective. It’s actually not as simple as “an exception occurs and then the process crashes.” The TruthLet’s first look at the source code of BasicBoltExecutor: 123456789101112public void execute(Tuple input) { _collector.setContext(input); try { _bolt.execute(input, _collector); ...
Dynamically Adding Appenders to Log4j
Most Java developers manage log output through configuration files (log4j.properties or log4j.xml). But in certain operational scenarios, dynamically modifying logging configuration at runtime offers greater flexibility — for example, temporarily enabling DEBUG level during online troubleshooting, or dynamically pushing logs to Kafka for centralized analysis. Log4j 1.x’s API fully supports runtime configuration changes via code. This article uses KafkaAppender as an example to demonstrate how...
[Translation] Some Experiences Writing Benchmarks in Java
Why Benchmark Testing is NeededSometimes we need to write some simple performance test code. I happened to come across an experience-based post on Stack Overflow: https://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java — how to write benchmarks to minimize environmental influence. Here’s my translation: Writing Reliable BenchmarksTips from a Java HotSpot author on writing microbenchmarks: Rule 0: Read good papers on the JVM and microbenchmarks. For example,...
Maven Mirror and Repository: Configuring Multiple Repositories
Mirror and repository in Maven are two easily confused concepts, as both are used to configure the addresses of remote Maven repositories. As the name suggests, a repository directly configures the site address, while a mirror acts as a site’s mirror, proxying requests to one or several sites, achieving a complete replacement of repositories. RepositoryThere are two ways to configure multiple repositories: configuring multiple profiles or configuring multiple repositories within a single prof...
Building Executable JAR Packages with Maven Shade Plugin
What Is a Fat JarEclipse has a feature called “Export Runnable JAR File” that packages a project along with all its dependencies into a Fat JAR, with a specified Main class, so you can run the code directly using java jar xxx.jar. Maven Shade Plugin ConfigurationHowever, what if you’re not using Eclipse? Actually, with the help of Maven, we can easily achieve the same functionality. Maven provides a Shade Plugin that can be used to build Fat JARs, and it also supports specifying the Main cl...
ActiveMQ Plugin Development Guide and Examples
ActiveMQ provides a plugin development mechanism (http://activemq.apache.org/developing-plugins.html) that allows you to conveniently add various custom functionalities. The effect is similar to directly modifying ActiveMQ’s source code, but using plugins is much better than modifying source code in terms of both convenience and risk. In theory, we can implement almost any functionality imaginable through this approach. Development GuideFirst, you need to add the ActiveMQ dependency to your p...






![[Translation] Some Experiences Writing Benchmarks in Java](/en/img/4987.jpg)






