Handling Messages
Overview
Writing a Message Handler
@AppHAPolicy(HAPolicy.EventSourcing)
public class OrderProcessor {
// Injected by the platform
private AepMessageSender messageSender;
// Application-owned store (POJOs)
private Map<String, Order> orders = new HashMap<>();
@AppInjectionPoint
public void setMessageSender(AepMessageSender messageSender) {
this.messageSender = messageSender;
}
/**
* Message handler for new order messages
*/
@EventHandler
public void onNewOrder(NewOrderMessage message) {
// 1. Read data from inbound message
String orderId = message.getOrderId();
String symbol = message.getSymbol();
int quantity = message.getQuantity();
// 2. Read and update microservice store (POJOs)
Order order = orders.get(orderId);
if (order == null) {
order = new Order();
order.setOrderId(orderId);
orders.put(orderId, order);
}
order.setSymbol(symbol);
order.setQuantity(quantity);
order.setStatus("PENDING");
// 3. Create and send outbound message
OrderAckMessage ack = OrderAckMessage.create();
ack.setOrderId(orderId);
ack.setStatus("ACCEPTED");
ack.setTimestamp(System.currentTimeMillis());
messageSender.sendMessage("order-acks", ack);
// 4. Handler returns - transaction commits
// The AEP Engine will:
// - Replicate inbound message to backup instances
// - Backup replays message to rebuild store
// - Establish consensus with cluster members
// - Commit the transaction
// - Send the outbound message
// - Acknowledge the inbound message
}
}Handler Signature
Handler Method Names
Multiple Handlers for Same Message Type
Reading Inbound Messages
Accessing Microservice Store
Sending Outbound Messages
Transaction Lifecycle
Common Patterns
Pattern: Lookup or Create
Pattern: Conditional Send
Pattern: Aggregate and Send
Pattern: Forwarding Messages
Advanced Topics
Using Savepoints
Zero Garbage Programming
See Also
Last updated

