Documentation Index
Fetch the complete documentation index at: https://mintlify.com/hivemq/hivemq-community-edition/llms.txt
Use this file to discover all available pages before exploring further.
The EmbeddedExtension interface represents a programmatically-defined HiveMQ extension that can be added to an embedded HiveMQ instance.
Package
com.hivemq.embedded.EmbeddedExtension
Interface Declaration
public interface EmbeddedExtension
Since: CE 2020.5
Methods
builder()
Creates a new EmbeddedExtensionBuilder instance.
static @NotNull EmbeddedExtensionBuilder builder()
Returns:
EmbeddedExtensionBuilder - A new builder instance for creating an EmbeddedExtension
Example:
EmbeddedExtensionBuilder builder = EmbeddedExtension.builder();
getId()
Returns the unique identifier of the extension.
Returns:
String - The unique ID of the extension
Example:
EmbeddedExtension extension = EmbeddedExtension.builder()
.withId("my-extension")
.withName("My Extension")
.withVersion("1.0.0")
.withExtensionMain(new MyExtensionMain())
.build();
String id = extension.getId(); // "my-extension"
getName()
Returns the human-readable name of the extension.
@NotNull String getName()
Returns:
String - The name of the extension
Example:
String name = extension.getName(); // "My Extension"
getVersion()
Returns the version of the extension.
@NotNull String getVersion()
Returns:
String - The version of the extension
Example:
String version = extension.getVersion(); // "1.0.0"
getAuthor()
Returns the author of the extension.
@Nullable String getAuthor()
Returns:
String - The author of the extension, or null if not provided
Example:
String author = extension.getAuthor(); // "HiveMQ" or null
getPriority()
Returns the extension’s execution priority.
Returns:
int - The priority value. Extensions are called in order from highest to lowest priority.
Behavior:
- All extensions are called in the order of their priority (highest to lowest).
- Default value:
0
Example:
int priority = extension.getPriority(); // 0
getStartPriority()
Returns the extension’s start priority.
Returns:
int - The start priority value. Extensions are started in order from highest to lowest priority.
Behavior:
- All extensions are started in the order of their start priority (highest to lowest).
- Default value:
1000
Example:
int startPriority = extension.getStartPriority(); // 1000
getExtensionMain()
Returns the extension’s main class instance.
@NotNull ExtensionMain getExtensionMain()
Returns:
ExtensionMain - The extension main class that implements extensionStart() and extensionStop()
Example:
ExtensionMain main = extension.getExtensionMain();
Usage Examples
Basic Extension
import com.hivemq.embedded.EmbeddedExtension;
import com.hivemq.extension.sdk.api.ExtensionMain;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartOutput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopOutput;
import org.jetbrains.annotations.NotNull;
public class BasicExtensionExample {
public static void main(String[] args) {
EmbeddedExtension extension = EmbeddedExtension.builder()
.withId("basic-extension")
.withName("Basic Extension")
.withVersion("1.0.0")
.withExtensionMain(new BasicExtensionMain())
.build();
// Access extension properties
System.out.println("ID: " + extension.getId());
System.out.println("Name: " + extension.getName());
System.out.println("Version: " + extension.getVersion());
}
private static class BasicExtensionMain implements ExtensionMain {
@Override
public void extensionStart(
@NotNull ExtensionStartInput input,
@NotNull ExtensionStartOutput output) {
System.out.println("Extension started");
}
@Override
public void extensionStop(
@NotNull ExtensionStopInput input,
@NotNull ExtensionStopOutput output) {
System.out.println("Extension stopped");
}
}
}
Extension with Priorities
import com.hivemq.embedded.EmbeddedExtension;
import com.hivemq.extension.sdk.api.ExtensionMain;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartOutput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopOutput;
import org.jetbrains.annotations.NotNull;
public class PriorityExtensionExample {
public static void main(String[] args) {
EmbeddedExtension highPriorityExtension = EmbeddedExtension.builder()
.withId("high-priority-ext")
.withName("High Priority Extension")
.withVersion("1.0.0")
.withPriority(100) // Runs first
.withStartPriority(2000) // Starts first
.withAuthor("HiveMQ")
.withExtensionMain(new MyExtensionMain())
.build();
System.out.println("Priority: " + highPriorityExtension.getPriority());
System.out.println("Start Priority: " + highPriorityExtension.getStartPriority());
}
private static class MyExtensionMain implements ExtensionMain {
@Override
public void extensionStart(
@NotNull ExtensionStartInput input,
@NotNull ExtensionStartOutput output) {
System.out.println("High priority extension started");
}
@Override
public void extensionStop(
@NotNull ExtensionStopInput input,
@NotNull ExtensionStopOutput output) {
System.out.println("High priority extension stopped");
}
}
}
Complete Extension with HiveMQ
import com.hivemq.embedded.EmbeddedExtension;
import com.hivemq.embedded.EmbeddedHiveMQ;
import com.hivemq.extension.sdk.api.ExtensionMain;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartOutput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopOutput;
import com.hivemq.extension.sdk.api.services.Services;
import org.jetbrains.annotations.NotNull;
public class CompleteExample {
public static void main(String[] args) {
EmbeddedExtension extension = EmbeddedExtension.builder()
.withId("logging-extension")
.withName("Connection Logging Extension")
.withVersion("1.0.0")
.withPriority(0)
.withStartPriority(1000)
.withAuthor("Your Company")
.withExtensionMain(new LoggingExtensionMain())
.build();
try (EmbeddedHiveMQ hivemq = EmbeddedHiveMQ.builder()
.withEmbeddedExtension(extension)
.build()) {
hivemq.start().join();
System.out.println("HiveMQ running with extension: " + extension.getName());
Thread.sleep(60000); // Run for 1 minute
} catch (Exception e) {
e.printStackTrace();
}
}
private static class LoggingExtensionMain implements ExtensionMain {
@Override
public void extensionStart(
@NotNull ExtensionStartInput input,
@NotNull ExtensionStartOutput output) {
// Register client lifecycle callbacks
Services.eventRegistry().setClientLifecycleEventListener(
eventListenerInput -> {
eventListenerInput.getClientEventListeners()
.addConnectEventListener(context -> {
System.out.println("Client connected: " +
context.getClientInformation().getClientId());
})
.addDisconnectEventListener(context -> {
System.out.println("Client disconnected: " +
context.getClientInformation().getClientId());
});
});
System.out.println("Logging extension started successfully");
}
@Override
public void extensionStop(
@NotNull ExtensionStopInput input,
@NotNull ExtensionStopOutput output) {
System.out.println("Logging extension stopped");
}
}
}
import com.hivemq.embedded.EmbeddedExtension;
import com.hivemq.extension.sdk.api.ExtensionMain;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStartOutput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopInput;
import com.hivemq.extension.sdk.api.parameter.ExtensionStopOutput;
import org.jetbrains.annotations.NotNull;
public class ExtensionInfoExample {
public static void main(String[] args) {
EmbeddedExtension extension = EmbeddedExtension.builder()
.withId("info-extension")
.withName("Information Extension")
.withVersion("2.1.0")
.withAuthor("John Doe")
.withPriority(50)
.withStartPriority(1500)
.withExtensionMain(new InfoExtensionMain())
.build();
printExtensionInfo(extension);
}
private static void printExtensionInfo(EmbeddedExtension extension) {
System.out.println("===== Extension Information =====");
System.out.println("ID: " + extension.getId());
System.out.println("Name: " + extension.getName());
System.out.println("Version: " + extension.getVersion());
System.out.println("Author: " + extension.getAuthor());
System.out.println("Priority: " + extension.getPriority());
System.out.println("Start Priority: " + extension.getStartPriority());
System.out.println("=================================");
}
private static class InfoExtensionMain implements ExtensionMain {
@Override
public void extensionStart(
@NotNull ExtensionStartInput input,
@NotNull ExtensionStartOutput output) {
// Extension logic here
}
@Override
public void extensionStop(
@NotNull ExtensionStopInput input,
@NotNull ExtensionStopOutput output) {
// Cleanup logic here
}
}
}
See Also