Event Mesh Gateway
If you already have an event mesh in place, you can integrate Solace Agent Mesh into it. This allows you to leverage existing infrastructure while introducing intelligence and automation through Solace Agent Mesh.
Benefits of Integrating with an Event Mesh
- Seamless Communication: Solace Agent Mesh can subscribe to and publish events across the entire event mesh
- Event-Driven Automation: Intelligent event processing based on patterns and AI-driven insights
- Scalability: Solace Agent Mesh can dynamically participate in large-scale event-driven systems
The Event Mesh Gateway connects Solace Agent Mesh (SAM) to your existing event mesh infrastructure. Through its asynchronous interfaces, applications within your event mesh can seamlessly access and utilize Solace Agent Mesh capabilities.
This tutorial shows you how to build an Event Mesh Gateway that automatically generates and adds concise summaries to Jira bug reports, making them easier to understand at a glance.
Prerequisites
This tutorial assumes you have an existing Jira application integrated with your event mesh that:
- Publishes a "jira_created" event to topic
jira/issue/created/<jira_id>
when a new Jira issue is created - Listens for "jira_update" events on topic
jira/issue/update
to update existing issues
Create an Event Mesh Gateway that:
- Monitors for new Jira issues
- Automatically generates a concise summary
- Creates an event to update the original Jira issue with this summary
This creates a streamlined workflow where bug reports are automatically enhanced with clear, AI-generated summaries.
Setting Up the Environment
First, you need to install Solace Agent Mesh and the SAM CLI, and then create a new Solace Agent Mesh project.
For this tutorial, you need to create or use an existing Solace Event Broker or event mesh created using PubSub+ event brokers.
Adding the Event Mesh Gateway Plugin
Once you have your project set up, add the Event Mesh Gateway plugin:
sam plugin add jira-event-mesh --plugin sam-event-mesh-gateway
You can use any name for your agent, in this tutorial we use jira-event-mesh
.
This command:
- Installs the
sam-event-mesh-gateway
plugin - Creates a new gateway configuration named
jira-event-mesh
in yourconfigs/gateways/
directory
Configuring the Event Mesh Gateway
After adding the plugin, you can see a new configuration file in configs/gateways/jira-event-mesh.yaml
. This file contains the gateway configuration that needs to be customized for your Jira integration use case.
Environment Variables
First, set up the required environment variables for the data plane connection:
# Data plane Solace broker connection (can be same or different from control plane)
export JIRA_EVENT_MESH_SOLACE_BROKER_URL="ws://localhost:8080"
export JIRA_EVENT_MESH_SOLACE_BROKER_VPN="default"
export JIRA_EVENT_MESH_SOLACE_BROKER_USERNAME="default"
export JIRA_EVENT_MESH_SOLACE_BROKER_PASSWORD="default"
Gateway Configuration
The main configuration includes several key sections:
Event Handlers
Configure the event handler to listen for new Jira issues and generate summaries:
event_handlers:
- name: "jira_issue_handler"
subscriptions:
- topic: "jira/issue/created/>"
qos: 1
input_expression: "template:Create a concise summary for the newly created Jira issue: Title: {{text://input.payload:title}}, Body: {{text://input.payload:body}}, ID: {{text://input.payload:id}}. Return a JSON object with fields 'id', 'type' (value should be 'summary'), and 'summary'."
payload_encoding: "utf-8"
payload_format: "json"
target_agent_name: "OrchestratorAgent"
on_success: "jira_summary_handler"
on_error: "error_response_handler"
forward_context:
jira_id: "input.payload:id"
correlation_id: "input.user_properties:correlation_id"
Output Handlers
Configure output handlers to publish the summary back to the event mesh:
output_handlers:
- name: "jira_summary_handler"
topic_expression: "static:jira/issue/update"
payload_expression: "task_response:text"
payload_encoding: "utf-8"
payload_format: "json"
- name: "error_response_handler"
topic_expression: "template:jira/issue/error/{{text://user_data.forward_context:jira_id}}"
payload_expression: "task_response:a2a_task_response.error"
payload_encoding: "utf-8"
payload_format: "json"
Complete Configuration Example
Here is a complete configuration file based on the plugin template:
log:
stdout_log_level: INFO
log_file_level: DEBUG
log_file: jira-event-mesh.log
!include ../shared_config.yaml
apps:
- name: jira-event-mesh-app
app_module: sam_event_mesh_gateway.app
broker:
<<: *broker_connection
app_config:
namespace: ${NAMESPACE}
gateway_id: "jira-event-mesh-gw-01"
artifact_service: *default_artifact_service
authorization_service:
type: "none" # Or "default_rbac"
default_user_identity: "anonymous_event_mesh_user" # If no identity from event
# Data plane connection
event_mesh_broker_config:
broker_url: ${JIRA_EVENT_MESH_SOLACE_BROKER_URL}
broker_vpn: ${JIRA_EVENT_MESH_SOLACE_BROKER_VPN}
broker_username: ${JIRA_EVENT_MESH_SOLACE_BROKER_USERNAME}
broker_password: ${JIRA_EVENT_MESH_SOLACE_BROKER_PASSWORD}
event_handlers:
- name: "jira_issue_handler"
subscriptions:
- topic: "jira/issue/created/>"
qos: 1
input_expression: "template:Create a concise summary for the newly created Jira issue: Title: {{text://input.payload:title}}, Body: {{text://input.payload:body}}, ID: {{text://input.payload:id}}. Return a JSON object with fields 'id', 'type' (value should be 'summary'), and 'summary'."
payload_encoding: "utf-8"
payload_format: "json"
target_agent_name: "OrchestratorAgent"
on_success: "jira_summary_handler"
on_error: "error_response_handler"
forward_context:
jira_id: "input.payload:id"
output_handlers:
- name: "jira_summary_handler"
topic_expression: "static:jira/issue/update"
payload_expression: "task_response:text"
payload_encoding: "utf-8"
payload_format: "json"
- name: "error_response_handler"
topic_expression: "template:jira/issue/error/{{text://user_data.forward_context:jira_id}}"
payload_expression: "task_response:a2a_task_response.error"
payload_encoding: "utf-8"
payload_format: "json"
Running the Event Mesh Gateway
Now you can run the Event Mesh Gateway:
sam run configs/gateways/jira-event-mesh.yaml
The gateway:
- Connects to both the A2A control plane and the data plane event mesh
- Subscribes to the configured topics on the data plane
- Starts processing incoming events and routing them to agents
Testing the Event Mesh Gateway
Now that the system is running, let's test the Event Mesh Gateway.
Using Solace PubSub+ Broker Manager
-
Open the Try Me! tab of the Solace PubSub+ Broker Manager
-
Connect both the Publisher and Subscriber panels by clicking their respective Connect buttons
-
In the Subscriber panel:
- Enter
jira/issue/update
in theTopic Subscriber
field - Click
Subscribe
- Enter
-
In the Publisher panel:
- Use the topic
jira/issue/created/JIRA-143321
- In the
Message Content
field, enter:
- Use the topic
{
"id": "JIRA-143321",
"title": "Exception when reading customer record",
"body": "I got a DatabaseReadException when trying to get the data for customer ABC. The error indicated that the customer didn't exist, while they are our biggest customer!"
}
- Click Publish
After a few seconds, you can see a new message in the Subscriber messages with the topic jira/issue/update
and a body similar to:
{
"id": "JIRA-143321",
"type": "summary",
"summary": "Database read error: Unable to retrieve record for key customer ABC despite confirmed existence"
}
Advanced Features
The Event Mesh Gateway supports several advanced features:
Artifact Processing
You can configure the gateway to automatically create artifacts from incoming message payloads before sending them to agents. This is useful for processing files, images, or other binary data embedded in events.
Dynamic Agent Routing
Instead of using a static target_agent_name
, you can use target_agent_name_expression
to dynamically determine which agent should process each event based on the message content.
Context Forwarding
The forward_context
configuration allows you to extract data from incoming messages and make it available when generating outgoing responses, enabling request-reply patterns and correlation tracking.
Error Handling
Configure separate output handlers for success and error scenarios to ensure proper error reporting and system monitoring.