info@yenlo.com
ned
Menu
WSO2 15 min

WSO2 Micro Integrator 4.5.0 integreren met Solace PubSub+ Event Broker

Ajanthan Eliyathamby Yenlo
Ajanthan Eliyathamby
Integratie Expert
How to Integrate WSO2 Micro Integrator 4.5.0 with Solace PubSub+ Event Broker

Het integreren van applicaties met event brokers is een veelvoorkomende vereiste binnen moderne integratieprojecten. In dit artikel laten we zien hoe je WSO2 Micro Integrator 4.5.0 koppelt aan Solace PubSub+ Event Broker en berichten uitwisselt via JMS 2.0.

Het doel is om te laten zien hoe WSO2 Micro Integrator berichten kan publiceren naar Solace en berichten daaruit kan consumeren. We bekijken ook wat er achter de schermen gebeurt wanneer een bericht vanuit WSO2 MI naar de Solace broker wordt verzonden.

Op hoofdlijnen communiceert WSO2 Micro Integrator via de JMS 2.0 API. De Solace JMS-provider implementeert deze API en gebruikt intern JCSMP, de native Java API van Solace. JCSMP zet het bericht vervolgens om naar SMF, het wire protocol van Solace, voordat de broker het bericht ontvangt, verwerkt en routeert.

Deze gids is praktisch en gericht op implementatie. We starten met een lokale Solace broker voor development, waarna we zowel Solace als WSO2 Micro Integrator configureren voor het publiceren en consumeren van berichten.

In dit artikel behandelen we: 

  1. Het opzetten van Solace PubSub+ Event Broker voor development. 
  2. De message flow van WSO2 Micro Integrator naar Solace. 
  3. Het configureren van Solace PubSub+ via de management console. 
  4. Het instellen van WSO2 Micro Integrator als message publisher. 
  5. Het instellen van WSO2 Micro Integrator als message consumer. 

Voordat we naar de use cases gaan, starten we eerst een Solace broker-instance en configureren we deze voor development. Zo hebben we een werkende omgeving die we in de rest van het artikel kunnen gebruiken.

1. De Solace Broker opzetten 

De eenvoudigste manier om een Solace-instance voor development te starten, is met behulp van de Docker-image. Voer simpelweg het onderstaande commando uit om een instance te starten. In dit artikel gebruiken we de Mac-versie.

docker run -d \ 
  --name=solace \ 
  -p 8080:8080 \     # PubSub+ Console (Web UI) 
  -p 55554:55555 \   # SMF (Solace Message Format) 
  -p 55443:55443 \   # SMFs (SMF over TLS) 
  -p 8008:8008 \     # REST 
  -p 1883:1883 \     # MQTT 
  -p 5672:5672 \     # AMQP 
  -p 9000:9000 \     # REST (Web Transport) 
  -p 2222:2222 \     # CLI (SSH) 
  --shm-size=2g \    # Shared memory for message spool 
  --env username_admin_globalaccesslevel=admin \ 
  --env username_admin_password=admin \ 
  --restart=unless-stopped \ 
  solace/solace-pubsub-standard:latest 
docker run -d --name=solace -p 8080:8080 -p 55554:55555 -p 55443:55443 -p 8008:8008 -p 1883:1883 -p 5672:5672 -p 9000:9000 -p 2223:2222 --shm-size=2g --env username_admin_globalaccesslevel=admin --env username_admin_password=admin --restart=unless-stopped solace/solace-pubsub-standard:latest 

Wanneer de container succesvol is gestart, kun je de status bekijken via Docker Desktop. 

Figure 01 Docker Desktop Container Status

Figuur 1: Docker Desktop Container Status 

Meer informatie over de poorten is te vinden in de Solace-documentatie. Onderstaande informatie is afkomstig uit de officiële documentatie voor de Software Broker. Voor andere typen brokers kunnen de poorten verschillen. Zie: Default Port Numbers

Port Service Description Type of Traffic 
2222 Solace Event Broker CLI (SSH/SFTP) Management 
8080 Access to Broker Manager, SEMP, and SolAdmin Management 
1943 Broker Manager (HTTPS), SEMP over TLS, SolAdmin over TLS Management 
5550 Health Check Listen Port Data 
5553 Health Check Listen Port (TLS) Data 
55555 Solace Message Format (SMF) Data 
55003 SMF Compressed Data 
55556 SMF Routing Data 
55443 SMF TLS / SSL (with or without compression) Data 
8008 Web Transport (WebSockets, Comet, etc.) Data 
1443 Web Transport TLS / SSL Data 
5671 AMQP TLS / SSL (default VPN; unique ports needed per VPN) Data 
5672 AMQP (default VPN; unique ports needed per VPN) Data 
1883 MQTT (default VPN; unique ports needed per VPN) Data 
8883 MQTT TLS / SSL (default VPN; unique ports needed per VPN) Data 
8000 MQTT over WebSockets (default VPN; unique ports needed per VPN) Data 
8443 MQTT over WebSockets TLS / SSL (default VPN; unique ports needed per VPN) Data 
9000 REST (default VPN; unique ports needed per VPN) Data 
9443 REST TLS / SSL (default VPN; unique ports needed per VPN) Data 
8741 High-Availability (HA) Mate Link HA 
8300 HA Configuration Synchronization HA 
8301 HA Configuration Synchronization HA 
8302 HA Configuration Synchronization HA 

Via http://localhost:8080/ kun je inloggen op de Solace Console met gebruikersnaam admin en wachtwoord admin.

Figure 02 Solace Console

Figuur 2: Solace Console

2. Hoe de message flow in de Solace Broker werkt

Voordat we met de implementatie beginnen, is het belangrijk om te begrijpen hoe de message flow tussen WSO2 Micro Integrator en Solace werkt. Dit helpt om de configuratie correct op te zetten.

Figure 2.1

Figuur 2.1: Message Flow

  1. De flow wordt gestart via de Axis2 JMS Transport in WSO2 Micro Integrator.
  2. WSO2 Micro Integrator wordt beschikbaar gesteld via de standaard Java JMS 2.0-interface.
  3. Solace JMS implementeert de javax.jms-interfaces met Solace-specifieke logica en vertaalt JMS-operaties naar JCSMP-calls.
  4. Solace JCSMP verzorgt de onderliggende netwerkcommunicatie. Denk hierbij aan het beheren van TCP-verbindingen, het gebruik van het SMF-protocol, reconnect-mechanismen, flow control en het coderen en decoderen van berichten.
  5. Zodra het bericht de Solace Broker bereikt, vindt eerst TLS-terminatie plaats bij de SMF Listener.
  6. Na de TLS-terminatie wordt het bericht gerouteerd op basis van de Message VPN die is meegegeven via de gebruikersnaam, bijvoorbeeld console-vp-username@console-vpn, of via een aparte parameter vanuit JMS.
parameter.Solace_JMS_VPN = "console-vpn" 
  1. Authenticatie wordt uitgevoerd op basis van de geconfigureerde methode, zoals Basic Authentication, Client Certificate, OAuth 2.0 of Kerberos.
  2. Na succesvolle authenticatie wordt het Client Profile toegepast dat aan de gebruiker is gekoppeld. Dit bepaalt welke acties zijn toegestaan, zoals het verzenden of ontvangen van berichten.
  3. Vervolgens wordt het ACL Profile gebruikt om te bepalen tot welke topics of queues de client toegang heeft.
  4. Omdat we gebruikmaken van JMS JNDI, moeten daarnaast de benodigde JNDI-objecten worden aangemaakt. Hiermee kunnen clients lookups uitvoeren en verbinding maken met de juiste topics of queues.

3. Solace configureren via de Console

3.1 Een Message VPN aanmaken

  1. Log in op http://localhost:8080 met admin/admin.
  2. Klik in de linkernavigatie op Message VPNs.
  3. Klik op + Create Message VPN.
Figure 03

Figuur 3: Create Message VPN

Op het volgende scherm zie je de standaard gebruikersconfiguratie. Wanneer een Message VPN in Solace wordt aangemaakt, bevat deze automatisch een ingebouwde client username met de naam default binnen die VPN. Tijdens het aanmaken vraagt de console om een wachtwoord voor deze gebruiker in te stellen. Als een client verbinding maakt met de VPN via een gebruikersnaam die niet overeenkomt met een expliciet geconfigureerde client username, valt Solace automatisch terug op deze default-gebruiker.

Figure 04

Figuur 4: Create Default User Configuration

Figure 05

Figuur 5: Weergave na succesvolle aanmaak van de Message VPN

3.2 Het Client Profile aanmaken

Het Client Profile bepaalt wat de client mag doen, zoals verzenden, ontvangen en guaranteed messaging gebruiken.

Navigeer naar console-vpn -> Access Control -> Client Profiles.

Klik op + Create Client Profile.

Figure 06

Figuur 6: Creating the Client Profile

Figure 07

Figuur 7: Enabling needed Configurations

Figure 08

Figuur 8: Successful Creation

3.3 Het ACL Profile aanmaken

Het ACL Profile bepaalt waar de client mag publiceren en subscriben, bijvoorbeeld op topic- of queue-niveau.

Figure 09

Figuur 9: Create ACL Profile

Figure 10

Figuur 10: Allow ACL Profiles

Standaard staat de actie ingesteld op Disallow. In een productieomgeving houd je deze instelling meestal op Disallow en voeg je expliciete uitzonderingen toe om specifieke toegang toe te staan. Voor deze gids laten we de configuratie echter open.

Dubbelklik op de optie Disallow. Hierdoor wordt de dropdown actief en kun je deze wijzigen naar Allow.

In dit voorbeeld staan we het volgende toe:

  • Client Connect.
  • Publish Topic.
  • Subscribe Topic.

3.4 De Client Username aanmaken met Basic Authentication

Figure 11

Figuur 11: Client Username toevoegen

Figure 12

Figuur 12: Client Username toevoegen

Figure 13

Figuur 13: Client Username toevoegen

3.5 De Queue voor Guaranteed Messaging aanmaken en koppelen aan een topic subscription

Figure 14

Figuur 14: Queue aanmaken voor Guaranteed Delivery

Figure 15

Figuur 15: Aangemaakte Queue

Nu moeten we de topic subscription toevoegen.

Figure 16

Figuur 16: Topic Subscription toevoegen

Figure 17

Figuur 17: Toegevoegde Subscription

3.6 JNDI-objecten aanmaken

Hoewel we de Solace-libraries gebruiken voor het opzetten van de verbinding, gebeurt onder de motorkap het volgende:

WSO2 -> JMS 2.0 API -> Solace JMS Implementation -> Solace JCSMP Implementation -> Solace Broker.

Omdat WSO2 de JMS API gebruikt en de JMS API ConnectionFactory- en Destination-objecten via JNDI-lookups ophaalt, moeten de JNDI-objecten op de broker bestaan.

3.6.1 JNDI inschakelen op de Message VPN

  • Navigeer naar console-vpn -> Settings.
  • Schakel onder JNDI de optie JNDI Enabled in.
  • Klik op Apply.
Figure 18

Figuur 18: JNDI inschakelen

3.6.2 Een JNDI Connection Factory aanmaken

  • Navigeer naar console-vpn -> JNDI -> Connection Factories.
  • Klik op + Create Connection Factory.
  • Gebruik de volgende instellingen:
  • Name: /jndi/cf/console-connection-factory
  • Messaging Properties:
  • Publisher Messages Delivery Mode: Persistent voor guaranteed messaging, of Non-Persistent voor direct messaging.
  • Transport: SMF.
  • Klik op Create.
Figure 19

Figuur 19: JNDI Connection Factory toevoegen

Figure 20

Figuur 20: JNDI Connection Factory toevoegen

3.6.3 Een JNDI Queue Object aanmaken

  • Navigeer naar console-vpn -> JNDI -> Queues.
  • Klik op + Create Queue.
  • Gebruik de volgende instellingen:
  • JNDI Name: /jndi/queue/console-queue
  • Physical Name: console-queue
  • Klik op Create.
Figure 21

Figuur 21: JNDI Queue toevoegen

Figure 22

Figuur 22: JNDI Queue toevoegen

Figure 23

Figuur 23: JNDI Queue toevoegen

3.6.4 Een JNDI-object voor een Physical Topic aanmaken

Figure 24

Figuur 24: Physical Topic

Figure 25

Figuur 25: Physical Topic

De configuratie die we tot nu toe hebben uitgevoerd, wordt samengevat in het onderstaande flowdiagram.

Figure 26

Figuur 26: Implementation Summary

4. WSO2 Micro Integrator instellen als message publisher

Nu kunnen we WSO2 Micro Integrator instellen om naar een topic te publiceren en berichten vanuit de queue te consumeren.

4.1 Benodigde JAR-bestanden downloaden

Download de onderstaande JAR-bestanden en plaats deze in MI_HOME/lib:

  • sol-jcsmp-10.22.0.jar
  • sol-jms-10.22.0.jar

Let op: versies vanaf 10.23 werken niet met WSO2 vanwege Netty-dependencies. Daarom gebruiken we hier de nieuwste versie die WSO2 MI 4.5.0 ondersteunt.

4.2 deployment.toml configureren voor de sender

[[transport.jms.sender]]

name = "solaceTopicSender"

parameter.initial_naming_factory = "com.solacesystems.jndi.SolJNDIInitialContextFactory"

parameter.provider_url = "smf://console-vpn-username:batticaloa@localhost:55554"

parameter.connection_factory_name = "/jndi/cf/console-connection-factory"

parameter.connection_factory_type = "topic"

parameter.Solace_JMS_VPN = "console-vpn"

4.3 CAR-file met API aanmaken

Maak vervolgens een CAR-file met een API zoals hieronder, waarmee berichten naar het topic worden gepubliceerd.

<?xml version="1.0" encoding="UTF-8"?> 
<api xmlns="http://ws.apache.org/ns/synapse" name="SolacePublisherAPI" context="/solace"> 
    <resource methods="POST" uri-template="/publish"> 
        <inSequence> 
            <!-- 1. Message Received at API --> 
            <log level="full"> 
                <property name="MESSAGE" value="Received request to publish to Solace"/> 
            </log> 
            <!-- 2. Set the properties out only and force sc accpeted to send back 202 --> 
            <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/> 
            <property name="OUT_ONLY" value="true"/> 
            <!-- 3. Send to Solace topic via JMS --> 
            <send> 
                <endpoint> 
                    <address uri="jms:/console-vpn-sub/messages/order?transport.jms.ConnectionFactory=solaceTopicSender&transport.jms.DestinationType=topic"/> 
                </endpoint> 
            </send> 
        </inSequence> 
    </resource> 
</api>

4.4 API-call versturen

curl --request POST \

--url http://localhost:8290/solace/publish \

--header 'Content-Type: application/json' \

--data '{"Name":"Test 3"}'

4.5 Berichten controleren in Solace

Controleer de berichten in de Solace Broker Console.

Figure 27

Figuur 27: Bericht in de queue

Daarmee is de sender-implementatie afgerond. Nu kunnen we doorgaan met de consumer-implementatie.

5. Consumer-implementatie

5.1 deployment.toml configureren voor de consumer

[[transport.jms.listener]]

name = "solaceQueueListener"

parameter.initial_naming_factory = "com.solacesystems.jndi.SolJNDIInitialContextFactory"

parameter.provider_url = "smf://console-vpn-username:batticaloa@localhost:55554"

parameter.connection_factory_name = "/jndi/cf/console-connection-factory"

parameter.connection_factory_type = "queue"

parameter.Solace_JMS_VPN = "console-vpn"

parameter.session_transaction = true

Omdat we sessietransacties hebben ingeschakeld, moeten we direct transport uitschakelen.

Figure 28

Figuur 28: Direct Transport uitschakelen

5.2 JMS Proxy aanmaken

Maak vervolgens een JMS Proxy zoals hieronder. Let op: dit is een voorbeeldconfiguratie. Afhankelijk van de requirements kun je aanvullende properties of parameters toevoegen aan de listener.

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" name="SolaceQueueListener" transports="jms" startOnLoad="true">

    <target> 
        <inSequence> 
            <log level="full"> 
                <property name="SolaceQueueListener" value="Received message from Solace queue"/> 
            </log> 
        </inSequence> 
        <faultSequence> 
            <property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/> 
            <log level="custom"> 
                <property name="SolaceQueueListener" value="Transaction Rollbacked"/> 
            </log> 
        </faultSequence> 
    </target> 

    <parameter name="transport.jms.ContentType"> 
        <rules> 
            <jmsProperty>contentType</jmsProperty> 
            <default>application/json</default> 
        </rules> 
    </parameter> 

    <parameter name="transport.jms.Destination">/jndi/queue/console-queue</parameter> 
    <parameter name="transport.jms.ConnectionFactory">solaceQueueListener</parameter> 
</proxy>

5.3 Logs controleren

Aan de hand van de logs kun je zien dat de listener is gestart en het bericht succesvol heeft geconsumeerd.

INFO {LogMediator} - {api:SolacePublisherAPI} To: /solace/publish, MessageID: urn:uuid:1ad6f8ba-93a8-4d17-bd6a-3e56664622e6, correlation_id: 1ad6f8ba-93a8-4d17-bd6a-3e56664622e6, Direction: request, MESSAGE = Received request to publish to Solace, Payload: {"Name":"Test 8"} 
INFO {TcpClientChannel} - Client-10: Connecting to host 'orig=tcp://localhost:55554, scheme=tcp://, host=localhost, port=55554' (host 1 of 1, smfclient 10, attempt 1 of 1, this_host_attempt: 1 of 1) 
INFO {JCSMPBasicSession} - Client-10: AdCtrl version changes: 2->4 
INFO {TcpClientChannel} - Client-10: Connected to host 'orig=tcp://localhost:55554, scheme=tcp://, host=localhost, port=55554' (smfclient 10) 
INFO {TcpClientChannel} - Client-10: Channel Closed (smfclient 10) 
[2026-04-07 16:01:54,987]  INFO {TcpClientChannel} - Client-11: Connecting to host 'orig=tcp://localhost:55554, scheme=tcp://, host=localhost, port=55554' (host 1 of 1, smfclient 11, attempt 1 of 1, this_host_attempt: 1 of 1) 
INFO {JCSMPBasicSession} - Client-11: AdCtrl version changes: 2->4 
INFO {TcpClientChannel} - Client-11: Connected to host 'orig=tcp://localhost:55554, scheme=tcp://, host=localhost, port=55554' (smfclient 11) 
INFO {LogMediator} - {proxy:SolaceQueueListener} To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: ID:192.168.2.16e59119d683fc4cb0:1, Direction: request, SolaceQueueListener = Received message from Solace queue, Payload: {"Name":"Test 8"}

6. Conclusie

Hiermee zijn we aan het einde gekomen van deze gids over het integreren van WSO2 Micro Integrator 4.5.0 met Solace PubSub+ Event Broker.

We hebben bekeken hoe berichten tussen WSO2 Micro Integrator en Solace stromen, inclusief de rol van JMS 2.0, de Solace JMS-provider, JCSMP en het SMF-protocol. Daarnaast hebben we stap voor stap Solace geconfigureerd, WSO2 Micro Integrator als publisher ingesteld en berichten geconsumeerd via WSO2 Micro Integrator API’s en een Proxy Service.

Met deze setup heb je een praktische basis om event-driven integraties te bouwen tussen WSO2 Micro Integrator en Solace PubSub+. Van hieruit kun je het voorbeeld verder uitbreiden met geavanceerdere routing, foutafhandeling, message persistence en realistische integratiescenario’s.

FAQ

Kan WSO2 Micro Integrator 4.5.0 verbinding maken met Solace PubSub+ Event Broker?

Ja. WSO2 Micro Integrator 4.5.0 kan via JMS 2.0 verbinding maken met Solace PubSub+ Event Broker. Hierdoor kan WSO2 MI berichten publiceren naar Solace-topics en berichten consumeren uit Solace-queues.

Hoe integreert WSO2 Micro Integrator met Solace PubSub+?

WSO2 Micro Integrator integreert met Solace PubSub+ via de JMS-transportlaag. Solace levert een JMS-implementatie die verbinding maakt met de Solace broker via JCSMP en het SMF-protocol.

Wat is nodig om WSO2 MI met Solace PubSub+ te verbinden?

Je hebt een draaiende Solace broker nodig, een Message VPN, client username, ACL profile, client profile, JNDI connection factory, JNDI queue- of topic-objecten en de benodigde Solace JMS-libraries in WSO2 MI.

Kan WSO2 MI berichten publiceren naar een Solace topic?

Ja. WSO2 MI kan berichten publiceren naar een Solace topic door een JMS sender te configureren en een JMS endpoint te gebruiken in een API of integratieflow.

Kan WSO2 MI berichten consumeren uit een Solace queue?

Ja. WSO2 MI kan berichten consumeren uit een Solace queue door een JMS listener te configureren en een JMS proxy service aan te maken die naar de Solace queue luistert.

Waarom Solace PubSub+ gebruiken met WSO2 Micro Integrator?

Solace PubSub+ helpt WSO2 Micro Integrator bij het ondersteunen van realtime, asynchrone en event-driven integraties. Dit is nuttig wanneer applicaties betrouwbare berichtaflevering, ontkoppelde communicatie en schaalbare event routing nodig hebben.

Wat is de rol van JMS in de integratie tussen WSO2 MI en Solace?

JMS fungeert als de standaard messaging API tussen WSO2 MI en Solace. WSO2 MI gebruikt JMS-transportconfiguraties, terwijl de Solace JMS-provider de communicatie met de Solace broker afhandelt.

Wat is de rol van JNDI in Solace JMS-integratie?

JNDI wordt gebruikt om JMS connection factories, queues en topics op te zoeken. Bij de integratie van WSO2 MI met Solace moeten de benodigde JNDI-objecten in Solace worden aangemaakt, zodat WSO2 MI verbinding kan maken met de juiste destinations.

Welke Solace-libraries zijn nodig voor WSO2 MI 4.5.0?

Voor deze setup zijn de volgende libraries nodig: sol-jcsmp-10.22.0.jar en sol-jms-10.22.0.jar. Deze libraries maken het mogelijk voor WSO2 MI om via JMS met Solace te communiceren.

Ondersteunt WSO2 MI guaranteed messaging met Solace?

Ja. WSO2 MI kan werken met Solace guaranteed messaging door berichten te publiceren naar topics die gekoppeld zijn aan queues, en door berichten uit Solace queues te consumeren via JMS listeners.

Wat is een Message VPN in Solace PubSub+?

Een Message VPN is een logische messaging-omgeving binnen Solace PubSub+. Het scheidt clients, queues, topics, authenticatie en toegangsbeheerinstellingen van elkaar.

Wat is het verschil tussen een Solace topic en een queue?

Een topic wordt meestal gebruikt voor publish-subscribe messaging, terwijl een queue wordt gebruikt voor guaranteed message delivery. In deze integratie kan WSO2 MI publiceren naar een topic en consumeren vanuit een queue.

Kan Solace PubSub+ lokaal worden uitgevoerd voor WSO2 MI-development?

Ja. Solace PubSub+ kan lokaal via Docker worden uitgevoerd en is daarmee geschikt voor development en het testen van WSO2 Micro Integrator-integraties.

Welke poort gebruikt WSO2 MI om verbinding te maken met Solace?

WSO2 MI maakt verbinding met Solace via de SMF-poort. In de Docker-setup van dit artikel wordt de interne Solace SMF-poort 55555 gemapt naar lokale poort 55554.

Zijn WSO2 MI en Solace PubSub+ geschikt voor event-driven architecture?

Ja. WSO2 MI en Solace PubSub+ kunnen samen worden gebruikt om event-driven integraties te bouwen waarbij applicaties asynchroon communiceren via topics en queues.

Whitepaper: API Security

2
Download Whitepaper
ned
Sluiten