<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>APIs and Connectors &#8211; GLU Global</title>
	<atom:link href="https://glu.global/article-categories/api-connector/feed/" rel="self" type="application/rss+xml" />
	<link>https://glu.global</link>
	<description>Innovation at Speed</description>
	<lastBuildDate>Wed, 25 Sep 2024 12:20:43 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://glu.global/wp-content/uploads/2022/01/cropped-favicon-1-32x32.png</url>
	<title>APIs and Connectors &#8211; GLU Global</title>
	<link>https://glu.global</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Health Checks</title>
		<link>https://glu.global/glu-guide/health-checks/</link>
		
		<dc:creator><![CDATA[Richard Price]]></dc:creator>
		<pubDate>Wed, 05 Jun 2024 06:50:24 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=7167</guid>

					<description><![CDATA[Overview The Health Checks allow you to configure and manage health checks for various services connected to your GLU.Engine instance. This guide will walk you through the setup process to ensure your services are correctly monitored and health checks are properly configured. Setting up is complete in 2 parts. Initially for a GLU.Engine the Health [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>Overview</strong></p>



<p>The Health Checks allow you to configure and manage health checks for various services connected to your GLU.Engine instance. This guide will walk you through the setup process to ensure your services are correctly monitored and health checks are properly configured.</p>



<p>Setting up is complete in 2 parts. Initially for a GLU.Engine the Health Check Manager is used to configure and switch on the type of health check needed.  Once this is done the connectors will need to be setup up with the details of the Endpoints which are used to check complete the health checks on.</p>



<p>See below details on these 2 parts</p>



<h2 class="wp-block-heading">1. Health Check &#8211; Manager</h2>



<p>Navigate to Health Check Manager</p>



<p>Navigate to Integration Builder </p>



<p>Choose a GLU.Engine and click on the Health Check Manager icon (see heart shaped icon below).</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="451" data-id="7221" src="https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-09.53.44-1-1024x451.png" alt="" class="wp-image-7221" srcset="https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-09.53.44-1-1024x451.png 1024w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-09.53.44-1-300x132.png 300w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-09.53.44-1-768x338.png 768w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-09.53.44-1-50x22.png 50w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-09.53.44-1-1536x677.png 1536w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-09.53.44-1.png 1655w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p>Switching on Health Check</p>



<p>Health checks can be switched on and configured for various states of your service i.e.  Live, Ready, Full, and Startup. It also provides the ability to define a new health check state.  See below which shows the Health Check Manager with endpoints for keycloak, slack and GLU Inbound and tabs for Live , Ready, Full and Startup.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="322" data-id="7227" src="https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.35.05-1024x322.png" alt="" class="wp-image-7227" srcset="https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.35.05-1024x322.png 1024w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.35.05-300x94.png 300w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.35.05-768x241.png 768w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.35.05-50x16.png 50w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.35.05.png 1374w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p> To configure a ‘Live’ state:</p>



<p>a. <strong>Select the State</strong>:</p>



<p>• Click on the Live tab to configure the health check for the Live state of your service.</p>



<p>b. <strong>Setting Up Health Check Details</strong>:</p>



<p>• <strong>Name</strong>: Assign a meaningful name for your health check. This value will be displayed on the tab. (e.g., Live)</p>



<p>• <strong>Context</strong>: Define the endpoint context for the health check. This is the path which will be used to call the API (e.g., /health/live)</p>



<p>• <strong>Collection Name</strong>: Specify a collection name to group related health checks. (e.g., Entries )</p>



<p>• <strong>Active</strong>: Ensure the checkbox is selected to activate the health check. If the tick box is switched off then the Method will not be available as a method for the GLU.Engine API.</p>



<p>c. <strong>Adding Connectors</strong>:</p>



<p>• <strong>Available Connectors</strong>: Select the services you want to include in the health check. In this example, you can see connectors like keycloak, slack and GLU Inbound.</p>



<p>• <strong>Enable Connector</strong>: Click the checkbox next to the desired connector to include it in the health check. For instance, slack is enabled in this example. A &#8220;Error 404 Not Found&#8221; will be returned if an API is called for a Connector which is not enabled.</p>



<p>d. <strong>Configuring Connector Details</strong>:</p>



<p>• <strong>Method</strong>: Choose the method for the health check. Options are HTTP or Ping. For slack, HTTP is selected. Please not the method will need to be configured in the connector to support the check see <strong>Health Check &#8211; Configuring a Connector  </strong>below.</p>



<p>• <strong>Group</strong>: Specify a group for organizational purposes. (e.g., Slack-Group)</p>



<p>• <strong>Tag</strong>: Assign a tag to help identify and filter this health check. (e.g., Slack-Tag)</p>



<p>e. <strong>Saving the Configuration</strong>:</p>



<p>• Click Save to store your health check configuration.</p>



<p>f. <strong>Adding Additional Endpoints</strong>:</p>



<p>• It is possible to also add more endpoints, click on the Add Endpoint button and add in details as above.</p>



<p><strong>Troubleshooting</strong></p>



<p>• Ensure all required fields are filled out.</p>



<p>• Verify that the connectors are correctly selected and configured.</p>



<p>• Check that the endpoint contexts are unique and properly formatted.</p>



<p>• Make sure to click Save after making changes to preserve your configurations.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading has-medium-font-size">2. <strong>Configuring a Connector </strong></h2>



<p>Navigate to the Connectors screen</p>



<p>Choose a connector and edit it</p>



<p>Choose the appropriate environment and click on “Step 2: Connector Environment Settings.” Then, navigate to the “Health Check” tab.</p>



<p>In this screen, you can configure the endpoints for HTTP requests used to check the health of a service. Additionally, you can set up PING settings if the endpoint supports pinging to verify its health status.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="766" height="501" data-id="7235" src="https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.51.02.png" alt="" class="wp-image-7235" srcset="https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.51.02.png 766w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.51.02-300x196.png 300w, https://glu.global/wp-content/uploads/2024/06/Screenshot-2024-07-22-at-10.51.02-50x33.png 50w" sizes="(max-width: 766px) 100vw, 766px" /></figure>
</figure>



<h4 class="wp-block-heading">Connector Environment Settings</h4>



<ol class="wp-block-list">
<li><strong>Select the Environment</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Choose the environment you wish to configure from the &#8220;ENVIRONMENTS&#8221; dropdown. In this case, select <code>docker-hub-DeskTOP</code>.</li>
</ul>



<p>2. <strong>HTTP Setting Configuration</strong>:</p>



<ul class="wp-block-list">
<li><strong>URL</strong>: Enter the webhook URL to which the HTTP POST request will be sent. For Slack, this will be in the format <code>https://hooks.slack.com/services/...</code>.
<ul class="wp-block-list">
<li>Example: <code>https://hooks.slack.com/services/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</code>.</li>
</ul>
</li>



<li><strong>Method</strong>: Select <code>POST</code> from the method dropdown as we are sending data to the server.</li>
</ul>



<p>3. <strong>Request Body</strong>:</p>



<ul class="wp-block-list">
<li>Enter the JSON payload to be sent with the HTTP request.
<ul class="wp-block-list">
<li>Example:<br><code>json { "text": "Health check" }</code></li>
</ul>
</li>
</ul>



<p>4. <strong>Response Body to Validate</strong>:</p>



<ul class="wp-block-list">
<li>Enter the expected response body to validate the health check.
<ul class="wp-block-list">
<li>Example: <code>ok</code>.</li>
</ul>
</li>
</ul>



<p>5. <strong>Ping Setting</strong>:</p>



<ul class="wp-block-list">
<li>Optionally, specify a server to ping for checking network connectivity. This is not configured in the provided example.</li>
</ul>



<p>6. <strong>Submit Configuration</strong>:</p>



<ul class="wp-block-list">
<li>Review all settings.</li>



<li>Click on the <code>Submit</code> button to save the configuration.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. <strong>API structure for health check</strong></h2>



<p>This explains how to access the Health Checks once the GLU.Engine has been built and deployed. </p>



<p>When GLU.Engine  is up and running there will be an API exposed that provides details on endpoints.   The path available will depend on the Health Check manager configuration. As an example if the FULL path is Active then the following method will be available. </p>



<h4 class="wp-block-heading">API Endpoint</h4>



<ul class="wp-block-list">
<li><strong>URL</strong>: <code>http://&lt;gateway-host&gt;:&lt;connector-port&gt;/health/full</code></li>



<li><strong>Method</strong>: <code>GET</code></li>
</ul>



<h4 class="wp-block-heading">Response Format</h4>



<p>The API returns a JSON object containing detailed information about the status and duration of each endpoint. Below is an example of the response:</p>



<pre class="wp-block-code"><code>{
    "status": "ALIVE",
    "totalDuration": "00:00:00.001482",
    "entries": {
        "keycloak": {
            "status": "ALIVE",
            "data": {},
            "tags": &#91;
                "Hkey"
            ],
            "duration": "00:00:00.001074"
        },
        "slack": {
            "status": "ALIVE",
            "data": {},
            "tags": &#91;
                "Slack-tag"
            ],
            "duration": "00:00:00.001482"
        }
    }
}</code></pre>



<h4 class="wp-block-heading">Response Fields</h4>



<ul class="wp-block-list">
<li><strong>status</strong>: Indicates the overall status of the API.</li>



<li><strong>Example</strong>: <code>"ALIVE"</code></li>



<li><strong>totalDuration</strong>: Shows the total time taken to query all endpoints.</li>



<li><strong>Example</strong>: <code>"00:00:00.001482"</code></li>



<li><strong>entries</strong>: Contains individual entries for each endpoint.</li>



<li><strong>keycloak</strong>: Represents the Keycloak endpoint.
<ul class="wp-block-list">
<li><strong>status</strong>: Status of the Keycloak endpoint.</li>



<li><strong>Example</strong>: <code>"ALIVE"</code></li>



<li><strong>data</strong>: Additional data related to the endpoint (currently empty).</li>



<li><strong>Example</strong>: <code>{}</code></li>



<li><strong>tags</strong>: Tags associated with the Keycloak endpoint.</li>



<li><strong>Example</strong>: <code>["Hkey"]</code></li>



<li><strong>duration</strong>: Time taken to query the Keycloak endpoint.</li>



<li><strong>Example</strong>: <code>"00:00:00.001074"</code></li>
</ul>
</li>



<li><strong>slack</strong>: Represents the Slack endpoint.
<ul class="wp-block-list">
<li><strong>status</strong>: Status of the Slack endpoint.</li>



<li><strong>Example</strong>: <code>"ALIVE"</code></li>



<li><strong>data</strong>: Additional data related to the endpoint (currently empty).</li>



<li><strong>Example</strong>: <code>{}</code></li>



<li><strong>tags</strong>: Tags associated with the Slack endpoint.</li>



<li><strong>Example</strong>: <code>["Slack-tag"]</code></li>



<li><strong>duration</strong>: Time taken to query the Slack endpoint.</li>



<li><strong>Example</strong>: <code>"00:00:00.001482"</code></li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4. <strong>Tips and Troubleshooting</strong></h2>



<p><strong>Network Issues</strong>: If the health check fails, check network connectivity and ensure there are no firewall rules blocking the request.</p>



<p><strong>Response Validation</strong>: Make sure the response body you expect (<code>ok</code> in this case) is accurate and matches the actual response from the server.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Swagger Load</title>
		<link>https://glu.global/glu-guide/swagger-load/</link>
		
		<dc:creator><![CDATA[Owen Meredith]]></dc:creator>
		<pubDate>Mon, 11 Mar 2024 16:51:44 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=6827</guid>

					<description><![CDATA[Swagger Load enables OpenAPI / Swagger files to be loaded into the GLU.Console to generate Transaction configurations directly. Linking the swagger to your connector For any REST connector, the green button is available for you to link a swagger. The first time you use the Swagger Load tool the pop-up below will prompt you to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Swagger Load enables OpenAPI / Swagger files to be loaded into the GLU.Console to generate Transaction configurations directly.</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Linking the swagger to your connector</strong></h2>



<p>For any REST connector, the green button is available for you to link a swagger. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="103" src="https://glu.global/wp-content/uploads/2024/05/image-1-1024x103.png" alt="" class="wp-image-7147" srcset="https://glu.global/wp-content/uploads/2024/05/image-1-1024x103.png 1024w, https://glu.global/wp-content/uploads/2024/05/image-1-300x30.png 300w, https://glu.global/wp-content/uploads/2024/05/image-1-768x77.png 768w, https://glu.global/wp-content/uploads/2024/05/image-1-50x5.png 50w, https://glu.global/wp-content/uploads/2024/05/image-1.png 1400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>The first time you use the Swagger Load tool the pop-up below will prompt you to either upload a .json or .yaml file or to point to a URL for the Swagger file you wish to use.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="478" src="https://glu.global/wp-content/uploads/2024/03/image-3-1024x478.png" alt="" class="wp-image-6832" srcset="https://glu.global/wp-content/uploads/2024/03/image-3-1024x478.png 1024w, https://glu.global/wp-content/uploads/2024/03/image-3-300x140.png 300w, https://glu.global/wp-content/uploads/2024/03/image-3-768x358.png 768w, https://glu.global/wp-content/uploads/2024/03/image-3-50x23.png 50w, https://glu.global/wp-content/uploads/2024/03/image-3.png 1076w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Once this is done and the Swagger document has been loaded against the connector, when you view the connector in the Connector screen you will see the BOTH button will be pink and an extra button will appear in the ACTION column. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="417" src="https://glu.global/wp-content/uploads/2024/04/Screenshot-2024-04-08-at-16.04.36-1024x417.png" alt="" class="wp-image-6958" srcset="https://glu.global/wp-content/uploads/2024/04/Screenshot-2024-04-08-at-16.04.36-1024x417.png 1024w, https://glu.global/wp-content/uploads/2024/04/Screenshot-2024-04-08-at-16.04.36-300x122.png 300w, https://glu.global/wp-content/uploads/2024/04/Screenshot-2024-04-08-at-16.04.36-768x313.png 768w, https://glu.global/wp-content/uploads/2024/04/Screenshot-2024-04-08-at-16.04.36-50x20.png 50w, https://glu.global/wp-content/uploads/2024/04/Screenshot-2024-04-08-at-16.04.36-1536x626.png 1536w, https://glu.global/wp-content/uploads/2024/04/Screenshot-2024-04-08-at-16.04.36.png 1566w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading has-medium-font-size"><strong>Using the swagger to generate configuration</strong></h2>



<p>You can access the Swagger Load tool within the Orchestration Manager. It will appear if the Connector you have selected is REST. If not, it will not appear.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="355" src="https://glu.global/wp-content/uploads/2024/03/image-2-1024x355.png" alt="" class="wp-image-6831" srcset="https://glu.global/wp-content/uploads/2024/03/image-2-1024x355.png 1024w, https://glu.global/wp-content/uploads/2024/03/image-2-300x104.png 300w, https://glu.global/wp-content/uploads/2024/03/image-2-768x266.png 768w, https://glu.global/wp-content/uploads/2024/03/image-2-50x17.png 50w, https://glu.global/wp-content/uploads/2024/03/image-2-1536x532.png 1536w, https://glu.global/wp-content/uploads/2024/03/image-2-2048x710.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>If you have previously loaded and used a Swagger file, when you click on &#8216;Generate Endpoint from Swagger&#8217; it will bring up the most recently loaded Swagger (example below). If you want to use a different Swagger, click on &#8216;Load New Version&#8217;. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://glu.global/wp-content/uploads/2024/03/image-5-1024x683.png" alt="" class="wp-image-6834" srcset="https://glu.global/wp-content/uploads/2024/03/image-5-1024x683.png 1024w, https://glu.global/wp-content/uploads/2024/03/image-5-300x200.png 300w, https://glu.global/wp-content/uploads/2024/03/image-5-768x512.png 768w, https://glu.global/wp-content/uploads/2024/03/image-5-50x33.png 50w, https://glu.global/wp-content/uploads/2024/03/image-5.png 1442w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>The Connector Swagger Manager popup (above) will show all API Transactions available within the Swagger file. You can use the radio buttons to select the API Transaction you want to generate you config for. </p>



<p>Below, you can see the &#8216;API Transaction&#8217; selected is &#8216;Find Pet by ID&#8217; and you are then given the option to define the Request and Response content types depending on what the API Transaction chosen supports. </p>



<p>You then click &#8216;Generate&#8217; to create the configuration for this leg of your Orchestration. You then simply need to clear the validation warnings by setting the Parameter Names to use for each Parameter on the Request and Response.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="691" src="https://glu.global/wp-content/uploads/2024/03/image-6-1024x691.png" alt="" class="wp-image-6835" srcset="https://glu.global/wp-content/uploads/2024/03/image-6-1024x691.png 1024w, https://glu.global/wp-content/uploads/2024/03/image-6-300x202.png 300w, https://glu.global/wp-content/uploads/2024/03/image-6-768x518.png 768w, https://glu.global/wp-content/uploads/2024/03/image-6-50x34.png 50w, https://glu.global/wp-content/uploads/2024/03/image-6.png 1286w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GLU SchemeName</title>
		<link>https://glu.global/glu-guide/glu-schemename/</link>
		
		<dc:creator><![CDATA[Rahim Ghezali]]></dc:creator>
		<pubDate>Thu, 02 Feb 2023 20:31:12 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=4493</guid>

					<description><![CDATA[The &#8220;Default Schema Name&#8221; defined in the connector will be stored in a GLU variable named GLU_schemaName. This variable can be utilised within an integration. Please note the camel case for the word GLU_schemaName. The screen below shows where the Default Schema Name can be defined in the Console Connector screen: The screen below shows [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>The &#8220;Default Schema Name&#8221; defined in the connector will be stored in a GLU variable named <code><strong><em>GLU_schemaName</em></strong></code>. This variable can be utilised within an integration.</p>



<p>Please note the camel case for the word <code><strong><em>GLU_schemaName</em></strong></code>.</p>



<p>The screen below shows where the Default Schema Name can be defined in the Console Connector screen:</p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="722" height="462" src="https://glu.global/wp-content/uploads/2023/02/image-16.png" alt="" class="wp-image-4509" style="width:684px;height:438px" srcset="https://glu.global/wp-content/uploads/2023/02/image-16.png 722w, https://glu.global/wp-content/uploads/2023/02/image-16-300x192.png 300w, https://glu.global/wp-content/uploads/2023/02/image-16-50x32.png 50w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure></div>


<p><br>The screen below shows how the variable is used in the call to the stored procedure for a Database endpoint connector.</p>



<p>${GLU_schemaName}</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="507" src="https://glu.global/wp-content/uploads/2023/02/image-17-1024x507.png" alt="" class="wp-image-4511" srcset="https://glu.global/wp-content/uploads/2023/02/image-17-1024x507.png 1024w, https://glu.global/wp-content/uploads/2023/02/image-17-300x149.png 300w, https://glu.global/wp-content/uploads/2023/02/image-17-768x381.png 768w, https://glu.global/wp-content/uploads/2023/02/image-17-50x25.png 50w, https://glu.global/wp-content/uploads/2023/02/image-17.png 1120w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>File Connectors</title>
		<link>https://glu.global/glu-guide/file-connectors/</link>
		
		<dc:creator><![CDATA[Rahim Ghezali]]></dc:creator>
		<pubDate>Thu, 02 Feb 2023 08:53:16 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=4409</guid>

					<description><![CDATA[File Connectors enable your GLU.Engine to connect to a Folder location to perform various actions with Files. The folder &#8220;directoryName&#8221; is the only path parameter, and there are 92 available query parameters that allow you to execute various actions, such as renaming, removing, avoiding changes, sorting, searching within sub-directories, and more. Refer to this Camel [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>File Connectors enable your GLU.Engine to connect to a Folder location to perform various actions with Files.</p>



<p>The folder &#8220;<strong><em>directoryName</em></strong>&#8221; is the only path parameter, and there are 92 available query parameters that allow you to execute various actions, such as renaming, removing, avoiding changes, sorting, searching within sub-directories, and more.</p>



<p>Refer to this Camel Component page for details on all the actions this connector type offers:&nbsp;<a href="https://camel.apache.org/components/latest/file-component.html" target="_blank" rel="noreferrer noopener"><strong><em>https://camel.apache.org/components/latest/file-component.html</em></strong></a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FILE / FTP / SFTP Connectors</title>
		<link>https://glu.global/glu-guide/ftp-sftp-connectors/</link>
		
		<dc:creator><![CDATA[Rahim Ghezali]]></dc:creator>
		<pubDate>Thu, 02 Feb 2023 08:49:22 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=4406</guid>

					<description><![CDATA[File Connectors File Connectors enable a GLU.Engine to provides a set of endpoints for reading and writing files. This component supports various file-related operations, such as consuming files from a directory, splitting and aggregating large files, and transforming data as it is being processed. The connection requires 3 path parameters: It also includes Query Parameters [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading has-medium-font-size">File Connectors</h1>



<p>File Connectors enable a GLU.Engine to provides a set of endpoints for reading and writing files. This component supports various file-related operations, such as consuming files from a directory, splitting and aggregating large files, and transforming data as it is being processed.<br><br></p>



<p>The connection requires 3 path parameters:</p>



<ol class="wp-block-list">
<li><strong>Host</strong>: The host parameter specifies the location or address of the file system you want to connect to. This could be a hostname, IP address, or a file path depending on the configuration of your file system.</li>



<li><strong>Port</strong>: The port parameter is typically used for network file systems that require a port number for communication. If you&#8217;re connecting to a local file system or a network file system that doesn&#8217;t require a port number, you may leave this parameter empty or specify a default port number.</li>



<li><strong>Directory Name</strong>: This parameter specifies the name or path of the directory within the file system that you want to interact with. This could be the root directory or a specific sub-directory where your files are located.</li>
</ol>



<p>It also includes Query Parameters that enable you to perform all sorts of actions such as renaming/removing / not touching / sorting / sub-directory searching / etc.<br><br></p>



<p>Refer to this Camel Component page for details on all the actions this connector type offers:&nbsp;<a rel="noreferrer noopener" href="https://camel.apache.org/components/latest/ftp-component.html" target="_blank">FTS Apache Camel</a> and contact GLU support for more information on how to utilise File connectors. <br><br></p>



<h1 class="wp-block-heading has-medium-font-size">FTP &amp; SFTP Connectors</h1>



<p><br><br></p>



<p>The File Transfer Protocol (FTP) is an application protocol in the Internet protocol suite. It allows file transfers among unlike hosts in diverse inter-networking environments. Using FTP, you can move a file from one computer to another, even if each computer has a different operating system and file storage format. Files can contain data, programs, text, or anything that can be stored online.<br><br></p>



<p>Two versions of Client FTP are supported by GLU.Ware &#8211; Client FTP2 and Client FTP.<br><br></p>



<p>GLU provides robust support for FTP (File Transfer Protocol) processing. The FTP component allows for the transfer of files between a local file system and a remote FTP server. The component supports both the FTP and SFTP (SSH File Transfer Protocol) protocols.<br><br></p>



<p>With GLU, you can perform various FTP-related operations, such as uploading and downloading files, listing files in a directory, and deleting files. You can also use GLU&#8217;s built-in data format support to convert data between different formats as it is being transferred to and from the FTP server.<br><br></p>



<p>GLU provides a flexible and extensible FTP endpoint that can be used in various types of use cases, such as data integration and ETL (Extract, Transform, Load) pipelines. The endpoint can be configured using a variety of options, such as username, password, hostname, port number, and the path to the FTP directory.<br><br></p>



<p>Additionally, GLU&#8217;s built-in support for error handling, retries, and exception handling make it easy to ensure reliable and efficient FTP processing, even in cases where network connectivity or other issues may cause temporary failures.<br><br></p>



<p><strong>Connector Configurations</strong><br><br></p>



<p>By default there are 6 Connector Properties that are pre-populated being:&nbsp;<br><br></p>



<ol class="wp-block-list">
<li><strong>noop</strong>: If true, the file is not moved or deleted in any way. This option is good for readonly data, or for ETL type requirements. If noop=true, GLU will set idempotent=true as well, which avoids consuming the same files over and over</li>



<li><strong>stepwise</strong>: Whether or not stepwise traversing directories should be used or not. Stepwise means that it will CD one directory at a time. You can disable this in case you can&#8217;t use this approach.</li>



<li><strong>binary</strong>: Specifies the file transfer mode, BINARY or ASCII. Default is ASCII (false).</li>



<li><strong>username</strong>: Specifies the username to use to log in to the remote file system.</li>



<li><strong>passiveMode</strong>: Specifies whether to use passive mode connections. Default is active mode (false).</li>



<li><strong>useList</strong>: Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because this information is only possible to retrieve when LIST command is in use.<br><br></li>
</ol>



<p>You can use the &#8216;Add Property&#8217; tool to add as many more as your FTP configuration requirements. </p>



<p><br>Refer to all property options here&nbsp;<a href="https://people.apache.org/~dkulp/camel/ftp2.html" target="_blank" rel="noreferrer noopener">Apache Camel FTP2</a>&nbsp;and&nbsp;<a href="https://camel.apache.org/components/latest/ftp-component.html" target="_blank" rel="noreferrer noopener">FTP Apache Camel</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LDAP Connectors</title>
		<link>https://glu.global/glu-guide/ldap-connectors/</link>
		
		<dc:creator><![CDATA[Rahim Ghezali]]></dc:creator>
		<pubDate>Thu, 02 Feb 2023 08:39:28 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=4404</guid>

					<description><![CDATA[The Lightweight Directory Access Protocol (LDAP) is a directory service protocol that runs on a layer above the TCP/IP stack. It provides a mechanism used to connect to, search, and modify Internet directories. The LDAP directory service is based on a client-server model. Companies store usernames, passwords, email addresses, printer connections, and other static data [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The Lightweight Directory Access Protocol (LDAP) is a directory service protocol that runs on a layer above the TCP/IP stack. It provides a mechanism used to connect to, search, and modify Internet directories. The LDAP directory service is based on a client-server model.</p>



<p>Companies store usernames, passwords, email addresses, printer connections, and other static data within directories. LDAP is an open, vendor-neutral application protocol for accessing and maintaining data. LDAP can also tackle authentication, so users can sign on just once and access many different files on the server. LDAP is a protocol, so it doesn&#8217;t specify how directory programs.</p>



<p>As some examples, LDAP can be used to validate usernames and passwords with Docker, Jenkins, Kubernetes, Open VPN, and Linux Samba servers. LDAP single sign-on can also be used by system administrators to control access to an LDAP database.</p>



<p></p>



<p>To configure an LDAP connector, follow these steps:</p>



<ol class="wp-block-list">
<li> <strong>Provide a Connector Name:</strong> Choose a descriptive name for your LDAP connector. This name will help you identify the connector in your configuration.</li>



<li><strong>Choose OUTBOUND for the Connection Direction:</strong> Since LDAP operates based on a client-server model, you typically establish outbound connections from your system to the LDAP server.</li>



<li><strong>Choose LDAP for the Protocol:</strong> Select LDAP as the protocol for your connector. This protocol is specifically designed for accessing and maintaining data stored in LDAP directories.</li>



<li><strong>Optionally Provide a description:</strong> You can provide a brief description of the connector to help other users understand its purpose or functionality.</li>



<li>Use the tick box to choose the Applications to which this connector applies.<br></li>
</ol>



<p><strong>Note:</strong> Host / Service Name (for docker) must always start with<strong><em> ldap://</em></strong></p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="689" height="305" src="https://glu.global/wp-content/uploads/2023/02/image-196.png" alt="" class="wp-image-5688" srcset="https://glu.global/wp-content/uploads/2023/02/image-196.png 689w, https://glu.global/wp-content/uploads/2023/02/image-196-300x133.png 300w, https://glu.global/wp-content/uploads/2023/02/image-196-50x22.png 50w" sizes="auto, (max-width: 689px) 100vw, 689px" /></figure></div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Redis Connectors</title>
		<link>https://glu.global/glu-guide/redis-connectors/</link>
		
		<dc:creator><![CDATA[Rahim Ghezali]]></dc:creator>
		<pubDate>Wed, 01 Feb 2023 09:47:58 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=4295</guid>

					<description><![CDATA[GLU supports connecting to Redis open source (BSD licensed), in-memory data structure store to be used as a database, cache, and message broker. With special adjustments in the GLU console, you allow Redis to be used instead of the existing cacheing mechanism. If Redis is used for cacheing, it provides a persistent data store for [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>GLU supports connecting to Redis open source (BSD licensed), in-memory data structure store to be used as a database, cache, and message broker.</p>



<p>With special adjustments in the GLU console, you allow Redis to be used instead of the existing cacheing mechanism.</p>



<p>If Redis is used for cacheing, it provides a persistent data store for the cache values (i.e. if the GLU.Engine is switched off the cached data is still stored in the Redis database, making it available for when the GLU.Engine comes alive)</p>



<p>For more details on Redis please refer to <a rel="noreferrer noopener" href="https://redis.io/" target="_blank"><strong>https://redis.io/</strong></a></p>



<p><br>To use Redis a connector needs to be set up to point to a Redis database.</p>



<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>1. Choose the Redis Connector</strong></h2>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="720" height="389" src="https://glu.global/wp-content/uploads/2023/02/image-166.png" alt="" class="wp-image-5610" style="width:640px" srcset="https://glu.global/wp-content/uploads/2023/02/image-166.png 720w, https://glu.global/wp-content/uploads/2023/02/image-166-300x162.png 300w, https://glu.global/wp-content/uploads/2023/02/image-166-50x27.png 50w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure></div>


<h2 class="wp-block-heading has-medium-font-size"><br><strong>2. Choose INBOUND | OUTBOUND Connectors</strong></h2>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="720" height="215" src="https://glu.global/wp-content/uploads/2023/02/image-167.png" alt="" class="wp-image-5611" style="width:640px" srcset="https://glu.global/wp-content/uploads/2023/02/image-167.png 720w, https://glu.global/wp-content/uploads/2023/02/image-167-300x90.png 300w, https://glu.global/wp-content/uploads/2023/02/image-167-50x15.png 50w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure></div>


<h2 class="wp-block-heading has-medium-font-size"><strong>3. Set the host and port for the Redis Database</strong></h2>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="894" height="412" src="https://glu.global/wp-content/uploads/2023/02/image-168.png" alt="" class="wp-image-5612" style="aspect-ratio:2.1701492537313434;width:640px" srcset="https://glu.global/wp-content/uploads/2023/02/image-168.png 894w, https://glu.global/wp-content/uploads/2023/02/image-168-300x138.png 300w, https://glu.global/wp-content/uploads/2023/02/image-168-768x354.png 768w, https://glu.global/wp-content/uploads/2023/02/image-168-50x23.png 50w" sizes="auto, (max-width: 894px) 100vw, 894px" /></figure></div>


<p>If the redis database setup requires password, these can be added under properties.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="899" height="489" src="https://glu.global/wp-content/uploads/2023/07/image-20230720-091219.png" alt="" class="wp-image-6360" style="width:640px" srcset="https://glu.global/wp-content/uploads/2023/07/image-20230720-091219.png 899w, https://glu.global/wp-content/uploads/2023/07/image-20230720-091219-300x163.png 300w, https://glu.global/wp-content/uploads/2023/07/image-20230720-091219-768x418.png 768w, https://glu.global/wp-content/uploads/2023/07/image-20230720-091219-50x27.png 50w" sizes="auto, (max-width: 899px) 100vw, 899px" /></figure></div>


<h2 class="wp-block-heading has-medium-font-size"><strong>4. On The transaction level of the integration choose Redis and the Redis connector</strong></h2>



<p>The redis option and connection dropdown will only be accessible if there is a redis connector setup and assigned to the GLU.Engine. Redis is available for the cache in the integration as well as for session management on GLU.USSD.</p>



<p>When this is selected, this will mean all the cache commands and cache variables will be stored in Redis. </p>



<p>For more information on the cache commands to access these values refer to <a href="https://glu.global/glu-guide/derived-parameters-functions-and-formulas/" data-type="ht_kb" data-id="3548" target="_blank" rel="noreferrer noopener"><strong>GLU Functions</strong></a></p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="235" src="https://glu.global/wp-content/uploads/2023/02/image-18-1024x235.png" alt="" class="wp-image-4542" style="width:741px;height:170px" srcset="https://glu.global/wp-content/uploads/2023/02/image-18-1024x235.png 1024w, https://glu.global/wp-content/uploads/2023/02/image-18-300x69.png 300w, https://glu.global/wp-content/uploads/2023/02/image-18-768x177.png 768w, https://glu.global/wp-content/uploads/2023/02/image-18-50x11.png 50w, https://glu.global/wp-content/uploads/2023/02/image-18.png 1122w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>


<p></p>



<h2 class="wp-block-heading"><strong>Redis Database Indexing</strong></h2>



<p>GLU seamlessly integrates with Redis, utilising the database index to specify the connector&#8217;s targeted database. Redis, by default, supports 16 databases, each identified by a number at the end of a Redis URL, such as redis://localhost:6379/0. The default is database 0, but you can assign any number from 0 to 15. If necessary, Redis can be configured to support additional databases through redis.conf. Each database offers a distinct keyspace, providing independence from one another. To configure it, kindly insert the index number in the connector&#8217;s property, as demonstrated in the example below.</p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="724" height="441" src="https://glu.global/wp-content/uploads/2024/02/image.png" alt="" class="wp-image-6676" srcset="https://glu.global/wp-content/uploads/2024/02/image.png 724w, https://glu.global/wp-content/uploads/2024/02/image-300x183.png 300w, https://glu.global/wp-content/uploads/2024/02/image-50x30.png 50w" sizes="auto, (max-width: 724px) 100vw, 724px" /></figure></div>


<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Message Queues</title>
		<link>https://glu.global/glu-guide/message-queues/</link>
		
		<dc:creator><![CDATA[Carol Whyte]]></dc:creator>
		<pubDate>Wed, 01 Feb 2023 09:32:20 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=4292</guid>

					<description><![CDATA[Asynchronous vs. Synchronous Messaging Asynchronous messaging refers to a communication pattern where a sender and a receiver do not need to be active or available at the same time. In contrast, synchronous messaging requires both the sender and receiver to be available at the same time for a communication to take place. The use of [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading has-medium-font-size"><strong>Asynchronous vs. Synchronous Messaging</strong></h1>



<p>Asynchronous messaging refers to a communication pattern where a sender and a receiver do not need to be active or available at the same time. In contrast, synchronous messaging requires both the sender and receiver to be available at the same time for a communication to take place.<br><br>The use of message queues in asynchronous messaging can provide several benefits over synchronous communication:</p>



<ol class="wp-block-list">
<li><strong>Scalability:</strong> Asynchronous messaging allows for communication between loosely coupled systems, which can be scaled independently, leading to better overall system scalability.</li>



<li><strong>Resilience:</strong> By decoupling systems, message queues provide a buffer between the sender and receiver, allowing the receiver to process messages at its own pace. This can improve system resilience, as it reduces the risk of cascading failures.</li>



<li><strong>Improved performance: </strong>Asynchronous messaging allows for non-blocking communication, enabling the sender to continue processing requests while waiting for a response. This can lead to improved system performance and responsiveness.</li>



<li><strong>Increased flexibility:</strong> Message queues allow for the creation of flexible and dynamic communication patterns, where messages can be routed to multiple recipients, transformed, and processed in parallel.</li>
</ol>



<p>Overall, the use of asynchronous messaging and message queues can provide greater flexibility, scalability, and resilience compared to synchronous messaging.</p>



<h1 class="wp-block-heading has-medium-font-size"><strong>GLU Message Queue Connectors</strong></h1>



<p>GLU.Ware supports integration to both ActiveMQ (Produce and Consume) and Rabbit Message Queues (Produce). Often useful for Asynchronous offloading of a task in a flow, MQ&#8217;s can help to speed up transaction round-trip times.</p>



<p><br>The Client DevOps team will be responsible for the MQ setup and configuration as for any other End-Point that the GLU.Engine Connects to as such configuration of the MQ&#8217;s is not covered here.</p>



<p><br>Based on the setup of the MQ Broker, the GLU Connector can be configured to support the appropriate Protocol e.g. TCP or AMQP.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1008" height="172" src="https://glu.global/wp-content/uploads/2023/02/image-187.png" alt="" class="wp-image-5665" srcset="https://glu.global/wp-content/uploads/2023/02/image-187.png 1008w, https://glu.global/wp-content/uploads/2023/02/image-187-300x51.png 300w, https://glu.global/wp-content/uploads/2023/02/image-187-768x131.png 768w, https://glu.global/wp-content/uploads/2023/02/image-187-50x9.png 50w" sizes="auto, (max-width: 1008px) 100vw, 1008px" /></figure>



<p><br>The GLU.Engine will contain all the libraries to facilitate the connections. So as an example for RabbitMQ all the client components are in the GLU.Engine no additional software is required.</p>



<p></p>



<p></p>



<h1 class="wp-block-heading has-medium-font-size"><strong>Publish/Subscribe Integration Pattern</strong></h1>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="445" height="327" src="https://glu.global/wp-content/uploads/2023/02/image-188.png" alt="" class="wp-image-5666" srcset="https://glu.global/wp-content/uploads/2023/02/image-188.png 445w, https://glu.global/wp-content/uploads/2023/02/image-188-300x220.png 300w, https://glu.global/wp-content/uploads/2023/02/image-188-50x37.png 50w" sizes="auto, (max-width: 445px) 100vw, 445px" /></figure>



<p></p>



<p>ActiveMQ and RabbitMQ are two popular message brokers that support the Microservice Publish/Subscribe integration pattern using topics for consumption by subscribers. GLU plans to expand its support for Pub/Sub pattern topics by adding compatibility with additional messaging systems such as Amazon SQS, IBM MQ, RocketMQ, Google Pub/Sub, Apache Pulsar, and Apache Kafka. Please log any requirements for GLU.Ware to priorise support for any of these via the <a href="https://gluglobal.atlassian.net/servicedesk/customer/portal/8" target="_blank" rel="noreferrer noopener">GLU.Support desk</a>.</p>



<p><br>The <strong>Publish–subscribe</strong> is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead categorise published messages into classes without knowledge of which subscribers, if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are.</p>



<p></p>



<p>This pattern is commonly used in messaging systems as part of larger message-oriented middleware systems. Many messaging systems, including Java Message Service (JMS), support both the Pub/Sub and message queue models.</p>



<p></p>



<p><br>In the <strong>Publish-subscribe model</strong>, subscribers typically receive only a subset of the total messages published. The process of selecting messages for reception and processing is called filtering. In a topic-based system, messages are published to &#8220;topics&#8221; or named logical channels. Subscribers in a topic-based system will receive all messages published to the topics to which they subscribe. The publisher is responsible for defining the topics to which subscribers can subscribe.</p>



<p></p>



<h1 class="wp-block-heading has-medium-font-size"><strong>RabbitMQ</strong></h1>



<p>RabbitMQ can be configured to either&nbsp;<strong>produce</strong>&nbsp;a RabbitMQ transaction on a Queue or&nbsp;<strong>consume</strong>&nbsp;from a RabbitMQ Queue. If a consumer is to be used then this will need to have a connector set up which has OUTBOUND/INBOUND set to BOTH.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="114" height="31" src="https://glu.global/wp-content/uploads/2023/02/image-2.webp" alt="" class="wp-image-4302" srcset="https://glu.global/wp-content/uploads/2023/02/image-2.webp 114w, https://glu.global/wp-content/uploads/2023/02/image-2-50x14.webp 50w" sizes="auto, (max-width: 114px) 100vw, 114px" /></figure>



<p>Both consumer and producers can be configured so that the settings for the rabbitMQ can be adjusted from the <strong><em>application.yml </em></strong>file.</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Connector Setup</strong></h2>



<p>Set Protocol to <strong><em>RABBIT_QUEUE</em></strong>. In the Connector Environment Settings panel, set the Username and Password for access to the RabbitMQ:</p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="987" height="627" src="https://glu.global/wp-content/uploads/2023/02/image-7.png" alt="" class="wp-image-4305" style="aspect-ratio:1.574468085106383;width:735px;height:auto" srcset="https://glu.global/wp-content/uploads/2023/02/image-7.png 987w, https://glu.global/wp-content/uploads/2023/02/image-7-300x191.png 300w, https://glu.global/wp-content/uploads/2023/02/image-7-768x488.png 768w, https://glu.global/wp-content/uploads/2023/02/image-7-50x32.png 50w" sizes="auto, (max-width: 987px) 100vw, 987px" /></figure></div>


<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Producer</strong></h2>



<p>When RabbitMQ is set up in a Connector, it will send transactions of the RabbitMQ as a producer.</p>



<h3 class="wp-block-heading has-medium-font-size"><strong>Using application.yml</strong> file</h3>



<p>To have the configuration setup so it is possible to configure the RabbitMQ from the <strong>application.yml</strong> file, you will need to tick the <strong>&#8220;Use Queue Holder&#8221; </strong>checkbox:</p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="484" height="725" src="https://glu.global/wp-content/uploads/2023/02/image-9.png" alt="" class="wp-image-4307" style="aspect-ratio:0.6675938803894298;width:450px" srcset="https://glu.global/wp-content/uploads/2023/02/image-9.png 484w, https://glu.global/wp-content/uploads/2023/02/image-9-200x300.png 200w, https://glu.global/wp-content/uploads/2023/02/image-9-33x50.png 33w" sizes="auto, (max-width: 484px) 100vw, 484px" /></figure></div>


<p>When this is ticked the <strong>default queue holder value</strong> needs to be setup. This value will be the initial value which is held in the <strong><em>application.yml</em></strong> file and used for the GLU.Engine interactions with RabbitMQ.</p>



<p><br><em>The parameters in the default queue string should use <strong>&#8220;&amp;amp&nbsp;;&#8221;</strong> separator values.</em></p>



<h3 class="wp-block-heading has-medium-font-size"><strong>When not using application.yml</strong></h3>



<p>To have the configuration setup so it is <strong>not</strong> possible to configure the RabbitMQ from the application.yml file, you will need to untick the <strong>&#8220;Use Queue Holder&#8221;</strong> button.</p>



<p><br>When this is unticked the&nbsp;<strong>Queue</strong>&nbsp;field should contain the rabbitMQ queue which the transaction will go to. The&nbsp;<strong>Options</strong>&nbsp;field should contain the string of characters which define the settings for the transaction going to RabbitMQ.</p>



<p><br><em>The parameters in the default queue string should use <strong>&#8220;&amp;amp&nbsp;;&#8221;</strong> separator values.</em></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Consumer</strong></h2>



<p>When RabbitMQ is set up as a connector it will receive the incoming transactions.</p>



<p><br>When the GLU.Engine is run then then this API will listen on the Queue from RabbitMQ and if there is transactions in the Queue it will pull them in and start the orchestration process.</p>



<h3 class="wp-block-heading has-medium-font-size"><strong>Using the  application.yml</strong> file</h3>



<p>To have the configuration setup so it is possible to configure the RabbitMQ from the <strong>application.yml</strong> file, you will need to tick the <strong>&#8220;Use Queue Holder&#8221;</strong> button.</p>



<p><br>When this is ticked the <strong>default queue holder value</strong> needs to be setup. This value will be the initial value which is held in the <strong><em>application.yml</em></strong> file and used for the integrations interactions with RabbitMQ.</p>



<p><br><em>The parameters in the default queue string should use <strong>&#8220;&amp;amp&nbsp;;&#8221;</strong> separator values.</em></p>



<h3 class="wp-block-heading has-medium-font-size">When not using <strong>application.yml</strong></h3>



<p>To have the configuration setup so it is <strong>not</strong> possible to configure the RabbitMQ from the <strong><em>application.yml </em></strong>file, you will need to untick the <strong>&#8220;Use Queue Holder&#8221;</strong> button.</p>



<p><br>When this is unticked the&nbsp;<strong>Queue</strong>&nbsp;field should contain the rabbitMQ queue which the transaction will go to . The&nbsp;<strong>options</strong>&nbsp;field should contain the string of characters which define the settings for the transaction going to RabbitMQ.</p>



<p><br><em>The parameters in the default queue string should use <strong>&#8220;&amp;amp&nbsp;;&#8221; </strong>separator values</em>:</p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="496" height="720" src="https://glu.global/wp-content/uploads/2023/02/image-13.png" alt="" class="wp-image-4312" style="aspect-ratio:0.6890756302521008;width:450px;height:auto" srcset="https://glu.global/wp-content/uploads/2023/02/image-13.png 496w, https://glu.global/wp-content/uploads/2023/02/image-13-207x300.png 207w, https://glu.global/wp-content/uploads/2023/02/image-13-34x50.png 34w" sizes="auto, (max-width: 496px) 100vw, 496px" /></figure></div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ISO8583 Connector</title>
		<link>https://glu.global/glu-guide/iso-8583-connector/</link>
		
		<dc:creator><![CDATA[Jono Hacking]]></dc:creator>
		<pubDate>Tue, 31 Jan 2023 13:47:59 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=4177</guid>

					<description><![CDATA[GLU ISO8583 Protocol Enabler The GLU.Ware ISO8583 Connectors make use of the opensource JPOS ISO8583 framework. More information can be found on JPOS&#160;here. GLU makes use of JPOS which&#160;is distributed under the GNU Affero General Public License V3. JPOS is the de-facto OpenSource implementation of the international ISO8583&#160;standard. JPOS is used in highly demanding production [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading has-medium-font-size"><strong>GLU ISO8583 Protocol Enabler</strong></h2>



<p>The GLU.Ware ISO8583 Connectors make use of the opensource JPOS ISO8583 framework. More information can be found on JPOS&nbsp;<a href="http://jpos.org/">here</a>. GLU makes use of JPOS which&nbsp;is distributed under the GNU Affero General Public License V3.</p>



<p></p>



<p>JPOS is the de-facto OpenSource implementation of the international ISO8583&nbsp;standard. JPOS is used in highly demanding production environments in over 80 countries processing literally thousands of transactions every single second, 24x7x365. JPOS provides an open-source software bridge between ISO 8583-based messages exchanged between processing networks and systems. ISO8583 is well suited to real-time, low-latency, and continuous communication scenarios. As such, it serves as the messaging foundation for systems that exchange electronic transactions made for example by cardholders using payment cards.</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Connections, Session and Persistence</strong></h2>



<p>The GLU ISO8583 connector uses a persistent session-based protocol, it relies on establishing persistent connections meaning that the connection between the client and the server is established once and maintained throughout the processing of multiple transactions. Once a connection is established, the client and server can exchange multiple messages within the same session. The session remains open until either the client or the server terminate it explicitly or if a predefined session timeout occurs. This approach enables a faster and more efficient flow of data and reduces the need for frequent connection setup and teardown.</p>



<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Multiplexing the ISO Channel with a MUX</strong></h2>



<p>Imagine an acquirer implementation that receives several requests at a time from several POS terminals and that has to route those requests to an issuer institution by means of an ISO Channel. While you can establish one socket connection per transaction, it is common practice to setup just one socket connection (handled by an ISO Channel instance) and multiplex it. A &#8216;MUX&#8217; is basically a channel multiplexer.</p>



<p></p>



<p>The default multiplexing interface used by GLU.Ware is the QMUX component. QMUX is an asynchronous, powerful, Q2 service that implements the MUX interface to Multiplexing an ISO Channel.</p>



<p></p>



<p>In order to match requests to responses, fields that have unique values that are echoed back are used. For QMUX to return the response matching the request, it needs to know which fields are always identical between the request and response. QMUX by default uses DE11 and DE41 (default field11 + field41 is used) as the matching keys.</p>



<p></p>



<p>When a message arrives on a MUX’s underlying ISO Channel, the MUX implementation checks to see if that message’s key is registered as a pending request. Should that key match a pending request, the response is handed to the waiting thread. If the key was registered as a request, or the response comes in too late then that response is (depending on the configuration) ignored, forwarded to an ISORequestListener or to a well-defined Space queue. Under many situations, the same channel that a client application may use to send requests and wait for responses may also receive requests coming from the remote server.</p>



<p></p>



<p>Here&#8217;s how the QMUX works:</p>



<p></p>



<ul class="wp-block-list">
<li><strong>Device Connections:</strong> The QMUX manages the communication channels (connections) between the GLU.Engine Client application and the Server-side system. It abstracts the low-level communication details and provides a higher-level API for the application to interact with the devices.</li>



<li><strong>Queue Management:</strong> Each device connected to the QMUX has its own input and output queues. These queues ensure that communication between the application and the devices is managed in an orderly and efficient manner, preventing data loss and ensuring proper synchronization.</li>



<li><strong>Asynchronous Processing:</strong> JPOS follows an event-driven architecture. When a device generates an event (e.g., a barcode is scanned, a paper roll is low), the corresponding event handler in the application is notified asynchronously. The QMUX manages these events and ensures they are properly dispatched to the application&#8217;s event handlers.</li>



<li><strong>Concurrency:</strong> The QMUX handles concurrent access to the device queues and ensures that requests from multiple threads are processed correctly and efficiently.</li>



<li><strong>Device Independent:</strong> The QMUX provides a unified API for interacting with various types of devices. This abstraction allows developers to write applications that are not tightly coupled to specific device implementations.</li>
</ul>



<h2 class="wp-block-heading"><strong>MUXPools</strong></h2>



<p>As an alternative to the QMUX component, GLU Connectors support MUXPools. MUXPools provide failover as well as load balancing options at the MUX level. The mechanism desired is referred to as a Strategy.</p>



<p>Client side MUXPools establish connections to the Server. If you have set MUXPools to be = 4, then the Client side will create and use up to 4 connections in parallel. These can all connect to the same IP/Port on the Server side. Each MUXPool connection is like a pipe. The GLU.Engine will use those pipes to process transactions within, the pipes once connected stay open to process transactions within until they are disconnected.</p>



<p>Disconnects can be triggered by the GE (client side) or by the Server side.</p>



<p>In the <strong>Q2 log</strong> if you see:<br></p>



<ul class="wp-block-list">
<li><strong>&lt;io-timeout/&gt;</strong> &#8230; that means the GLU.Engine is initiating a connection closing event.</li>



<li><strong>&lt;peer-disconnect/&gt;</strong> &#8230; that means the GLU.Engine has received a connection closing event from the far side.</li>
</ul>



<p>The GLU.Engine could trigger a connection to be closed if for example the timeout threshold is reached.</p>



<p></p>



<p>When configuring your GLU.Engine with an ISO outbound connector, you can set the timeout for those connections. That timeout setting will be applied to all 4 connections. If there is no traffic over a specific connection for longer than the timeout setting, the GE will disconnect that MUXPool connection. It will re-establish that connection within 5 seconds.</p>



<p></p>



<p>To ensure there is always a Client-Sever connection active, in particular if you have low traffic volumes, you can use an application level Echo message (0800/0810’s) and / or a network level Keep Alive to maintain the Client – Server connection. The frequency of your Echo messages should be configured to ensure that connection timeouts don’t occur.</p>



<p></p>



<p>If using an Echo message along with say x4 MUXPools, the Echo message will be sent on any of the x4 available MUXPool connections. A successful response, with no other traffic being processed will result in that MUXPool connection remaining active until the expiry of the GLU Connector Message Timeout setting (defaulted to 45s). Thereafter that MUXPool connection will timeout.</p>



<p></p>



<p>In the meantime, if your Echo message delay is say 55s (it is recommended to make this repeat frequency lower than the connector timeout) so that the next Echo message will be sent on any of the available active MUXPool connections. When a MUXPool connection times out, the system will re-establish the connection within 5 seconds. The Echo messages will ensure that there is always at least one active MUXPool connection.</p>



<p></p>



<p></p>



<h2 class="wp-block-heading"><strong>MUXPool Strategies</strong></h2>



<p><strong>PRIMARY SECONDARY </strong>(this is the default strategy)</p>



<ul class="wp-block-list">
<li>This strategy divides the MUX channels into two groups: primary and secondary. The primary channels are used for processing normal transaction requests, while the secondary channels serve as a backup for handling fallback scenarios. When a transaction is initiated, the MUXPool will attempt to use a primary channel first. If a primary channel is available and working, the transaction is processed using that channel. However, if a primary channel is unavailable or fails to respond within a specified timeout, the MUXPool will switch to using a secondary channel to process the transaction.</li>



<li>Typically, the primary and secondary channels are connected to different backend systems or network paths. The idea is to provide redundancy and ensure that transactions can be processed even if there is a failure in one of the primary channels.</li>
</ul>



<p><strong>ROUND-ROBIN</strong></p>



<p></p>



<ul class="wp-block-list">
<li>This strategy is a load-balancing strategy that distributes transactions evenly across the available MUX channels in a round-robin fashion. When a transaction is initiated, the MUXPool selects the next available channel in a cyclic order to process that transaction. Each new transaction is assigned to the next MUX channel in the sequence, creating a balanced distribution of transactions across all channels.</li>



<li>This strategy that distributes transactions evenly across the available MUX channels in a round-robin fashion. A MUX Pool is a collection or pool of multiple MUX Channels. The MUX Pool is responsible for managing these channels, making them available for transaction processing, and ensuring that the transactions are evenly distributed or processed based on the defined strategy. The number of MUX Channels in a MUX Pool is determined by how you initialise and configure the MUXPool class in your application. When creating a MUX Pool instance, you have the flexibility to specify the number of MUX Channels you want the pool to manage.</li>
</ul>



<p><strong>ROUND ROBIN WITH OVERRIDE</strong> (BETA &#8211; Contact GLU.Support prior to using this Strategy)</p>



<p></p>



<ul class="wp-block-list">
<li>To be used if you need to force completions and reversals to go out the same route as their corresponding originals.</li>
</ul>



<p><strong>SPLIT BY DIVISOR</strong> (BETA &#8211; Contact GLU.Support prior to using this Strategy)</p>



<p></p>



<ul class="wp-block-list">
<li>By using a splitField, ISO Messages can be distributed to different channels within the Pool.</li>
</ul>



<p></p>



<p>If making Strategy selection by configuration from the GLU.Console the entry format is handled, however if making changes directly in the GLU.Engine application.yml then you need to set the Strategy option as one of the below, note these are case and format is sensitive. The Default strategy must be in CAPS, others all lower-case i.e., options are as follows:</p>



<ul class="wp-block-list">
<li><strong>PRIMARY-SECONDARY</strong>: Use this option for primary-secondary strategy.</li>



<li><strong>round-robin</strong>: Use this option for round-robin strategy.</li>



<li><strong>round-robin-with-override</strong>: Use this option for round-robin strategy with override.</li>



<li><strong>split-by-divisor</strong>: Use this option for split-by-divisor strategy.</li>
</ul>



<p>For further context on MUXPool see: <a href="http://jpos.org/doc/javadoc/org/jpos/q2/iso/MUXPool.html">http://jpos.org/doc/javadoc/org/jpos/q2/iso/MUXPool.html</a></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Channels, Connections, Keep Alive&#8217;s and Echo&#8217;s</strong></h2>



<p>Given the session based nature of ISO8583 protocol, ISO Server and Client systems employ two mechanisms to maintain session connections that might otherwise expire / end when there is no other traffic being processed.</p>



<p><strong>Channel: </strong></p>



<p>A channel in jPOS represents a logical connection to a remote endpoint, typically a payment terminal or another financial system. It abstracts the communication protocol being used (e.g., ISO 8583) and provides an interface for sending and receiving messages. Channels handle the encoding and decoding of messages and manage the flow of messages between jPOS and the remote endpoint.</p>



<p></p>



<p><strong>TCP Connection: </strong></p>



<p>A TCP (Transmission Control Protocol) connection is a lower-level network connection that provides a reliable, ordered, and stream-oriented communication between two devices over an IP network. In jPOS, a TCP connection refers to the underlying network connection established between the jPOS instance and the remote endpoint (such as a payment terminal or another financial system) to exchange ISO 8583 messages.</p>



<p>A single Channel can manage multiple TCP Connections simultaneously.</p>



<p></p>



<p><strong>Keep Alive: </strong></p>



<p>Primarily a network-level mechanism to prevent connection closures due to inactivity by periodically exchanging messages at the network level. The addition of the Keep Alive is configured in Step 2 when configuring your ISO8583 Connector.</p>



<p></p>



<p><strong>Echo: </strong></p>



<p>An application-level mechanism to validate the operational status of a remote component by sending a message and expecting an identical response over a Channel.</p>



<p>Both mechanisms can be beneficial in different scenarios and can even be used together to ensure both network-level stability and application-level operability in a financial transaction system.</p>



<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Connector Settings</strong></h2>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="619" src="https://glu.global/wp-content/uploads/2023/03/image-16-1024x619.png" alt="" class="wp-image-5848" style="width:740px" srcset="https://glu.global/wp-content/uploads/2023/03/image-16-1024x619.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-16-300x181.png 300w, https://glu.global/wp-content/uploads/2023/03/image-16-768x464.png 768w, https://glu.global/wp-content/uploads/2023/03/image-16-50x30.png 50w, https://glu.global/wp-content/uploads/2023/03/image-16.png 1118w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>


<h3 class="wp-block-heading has-small-font-size"></h3>



<h3 class="wp-block-heading"><strong>Packagers</strong></h3>



<p>An ISO8583 packager is responsible for encoding the data into the correct message format before sending it over the network, and for decoding the received message into usable data. It also performs tasks such as error checking, data validation, and data formatting to ensure that the message is transmitted accurately and efficiently.</p>



<p>The diagram below illustrates the GLU ISO8583 Connector components and Packager functions. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="740" src="https://glu.global/wp-content/uploads/2023/09/image-2-1024x740.png" alt="" class="wp-image-6440" srcset="https://glu.global/wp-content/uploads/2023/09/image-2-1024x740.png 1024w, https://glu.global/wp-content/uploads/2023/09/image-2-300x217.png 300w, https://glu.global/wp-content/uploads/2023/09/image-2-768x555.png 768w, https://glu.global/wp-content/uploads/2023/09/image-2-50x36.png 50w, https://glu.global/wp-content/uploads/2023/09/image-2.png 1386w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p><strong>ISO8583 Packagers</strong> handle the following:</p>



<ul class="wp-block-list">
<li>Message Structure Definition: A packager defines the structure of an ISO 8583 message, specifying the layout and order of fields within the message. ISO 8583 messages consist of a fixed set of data elements, each representing different aspects of the transaction, such as the transaction type, amount, cardholder data, and more.</li>



<li>Data Encoding and Decoding: When you configure an ISO 8583 message in your GLU.Engine application, the packager is responsible for encoding the data from the application&#8217;s fields into the binary format required by the ISO 8583 standard. Conversely, when an incoming ISO 8583 message is received, the packager decodes the binary data into a structured format that the application can understand.</li>



<li>Field Formatting and Validation: The packager handles data formatting and validation for each field in the ISO 8583 message. It ensures that data is correctly formatted according to the standard&#8217;s specifications and performs basic checks to ensure data integrity and consistency.</li>



<li>Reusable Templates: The packager allows you to define reusable templates for various message types. This means you can define the structure and format of different ISO 8583 message types once and reuse them across your application, reducing redundancy and improving maintainability.</li>



<li>Customisation: While ISO 8583 defines a set of standard fields, financial institutions and payment processors often have specific requirements that go beyond the standard. Packagers can thus be customised to accommodate these specific needs by adding or modifying fields as necessary.</li>
</ul>



<p>It is important to understand what packager the system you are connecting to uses, GLU supports a wide range of packagers that can be selected from the Console. Support for bespoke / custom packagers is also provided via support request.</p>



<p></p>



<h3 class="wp-block-heading"><strong>Channel Type</strong></h3>



<p>Refers to the type of communication channel used for transmitting ISO8583 messages between systems.</p>



<p></p>



<h3 class="wp-block-heading"><strong>Send Message Length</strong></h3>



<p>Adds the length of the message to the request.</p>



<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>ISO8583 Messages</strong></h2>



<p>Data elements in an ISO8583 payload are identified by their position within the message string. The position of each data element within the message is specified by its field number and its position within that field.</p>



<p></p>



<h3 class="wp-block-heading"><strong>Sample Raw ISO8583 Message Payload</strong></h3>



<p></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="731" height="185" src="https://glu.global/wp-content/uploads/2023/03/image.png" alt="" class="wp-image-5815" srcset="https://glu.global/wp-content/uploads/2023/03/image.png 731w, https://glu.global/wp-content/uploads/2023/03/image-300x76.png 300w, https://glu.global/wp-content/uploads/2023/03/image-50x13.png 50w" sizes="auto, (max-width: 731px) 100vw, 731px" /><figcaption class="wp-element-caption"><br><strong><em>Raw ISO8583</em></strong></figcaption></figure>



<p>This is an incoming MTI 1200 ISO8583 message with binary values on the left and the message string on the right. When unpacked, this MTI 1200 looks like this:</p>



<p></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="707" height="266" src="https://glu.global/wp-content/uploads/2023/03/image-1.png" alt="" class="wp-image-5816" srcset="https://glu.global/wp-content/uploads/2023/03/image-1.png 707w, https://glu.global/wp-content/uploads/2023/03/image-1-300x113.png 300w, https://glu.global/wp-content/uploads/2023/03/image-1-50x19.png 50w" sizes="auto, (max-width: 707px) 100vw, 707px" /><figcaption class="wp-element-caption"><br><strong><em>Unpacked ISO8583</em></strong></figcaption></figure>



<p>Those values can be seen in the message string. GLU.Ware needs to be configured to unmarshall those values so the payload can be unpacked.</p>



<p></p>



<p><strong>Sample ISO8583 MTI 0800 Message Payload:</strong></p>



<p><em>0000&nbsp; 30 38 30 30 82 38 00 00&nbsp; 00 00 00 00 04 00 00 00&nbsp; <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">0800</mark>.<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">8&#8230;&#8230;&#8230;.</mark></em></p>



<p><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">0010&nbsp; 00 00 00 00 30 33 32 32&nbsp; 31 31 30 35 34 30 32 37</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">&nbsp;</mark> &#8230;.<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">032211054027</mark></em></p>



<p><em>0020&nbsp; 30 35 31 35 31 33 30 35&nbsp; 34 30 30 33 32 32 33 30&nbsp; <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">0515130540032230</mark></em></p>



<p><strong>0030&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">1</mark></strong></p>



<p>An <strong>ISO8583 message</strong> is made of the following parts:</p>



<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">Message type indicator (MTI)</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">One or more bitmaps, indicating which data elements are present. It consists of primary bitmap and secondary bitmap. This isn’t human readable.</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">Data elements, the actual information fields of the message- can be readable.</mark></li>
</ul>



<p>The placements of fields in different versions of the standard varies; for example, the currency elements of the 1987 and 1993 versions of the standard are no longer used in the 2003 version, which holds currency as a sub-element of any financial amount element. </p>



<p><a href="https://www.ibm.com/docs/en/integration-bus/10.0?topic=formats-iso8583-messaging-standard">https://www.ibm.com/docs/en/integration-bus/10.0?topic=formats-iso8583-messaging-standard</a></p>



<p>Unmarshalling of ISO parameters from the above data element section of an ISO payload relies on the specified position of the parameter in the data payload. The above data payload prints out with this value:</p>



<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">0322110540</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">270515</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">130540</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-pale-pink-color">0322</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-green-cyan-color">301</mark></li>
</ul>



<p>This is unmarshalled in GLU by specifying the position and length of each parameter. Field lengths are specified in the packager:</p>



<p><em>&lt;isofield id=&#8221;<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">7</mark></strong>&#8221; length=&#8221;<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">10</mark></strong>&#8221; name=&#8221;Date and time, transmission&#8221; class=&#8221;org.jpos.iso.IFA_NUMERIC&#8221;/&gt;</em></p>



<p><em>&lt;isofield id=&#8221;<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">11</mark></strong>&#8221; length=&#8221;<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">6</mark></strong>&#8221; name=&#8221;Systems trace audit number&#8221; class=&#8221;org.jpos.iso.IFA_NUMERIC&#8221;/&gt;</em></p>



<p><em>&lt;isofield id=&#8221;<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-pale-pink-color">13</mark></strong>&#8221; length=&#8221;<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-pale-pink-color">4</mark></strong>&#8221; name=&#8221;Date, Effective&#8221; class=&#8221;org.jpos.iso.IFA_NUMERIC&#8221;/&gt;</em></p>



<p><br>Example above unmarshalls as follows:</p>



<ul class="wp-block-list">
<li>Field[(7) Value (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>0322110540</strong></mark>)] to Param :[transmissionDateAndTime]</li>



<li>Field[(11) Value (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>270515</strong></mark>)] to Param :[systemTraceAuditNumber]</li>



<li>Field[(12) Value (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>130540</strong></mark>)] to Param :[timeLocalTransaction]</li>



<li>Field[(13) Value (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-pale-pink-color"><strong>0322</strong></mark>)] to Param :[dateLocalTransaction]</li>



<li>Field[(70) Value (<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-green-cyan-color">301</mark>)</strong>] to Param :[NetMngInfoCode]</li>
</ul>



<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Unmarshalling Example in GLU.Console</strong></h2>



<p>Field 11 has a Field Number and some Field Data Settings:</p>



<p></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="233" src="https://glu.global/wp-content/uploads/2023/03/image-4-1024x233.png" alt="" class="wp-image-5821" srcset="https://glu.global/wp-content/uploads/2023/03/image-4-1024x233.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-4-300x68.png 300w, https://glu.global/wp-content/uploads/2023/03/image-4-768x175.png 768w, https://glu.global/wp-content/uploads/2023/03/image-4-50x11.png 50w, https://glu.global/wp-content/uploads/2023/03/image-4-1536x349.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-4.png 2020w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>Field Number</em></figcaption></figure>



<p></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="223" src="https://glu.global/wp-content/uploads/2023/03/image-3-1024x223.png" alt="" class="wp-image-5820" srcset="https://glu.global/wp-content/uploads/2023/03/image-3-1024x223.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-3-300x65.png 300w, https://glu.global/wp-content/uploads/2023/03/image-3-768x168.png 768w, https://glu.global/wp-content/uploads/2023/03/image-3-50x11.png 50w, https://glu.global/wp-content/uploads/2023/03/image-3-1536x335.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-3.png 2003w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>Field Data Setting</em></figcaption></figure>



<p></p>



<p><strong>Note:</strong> Subfields are referenced as field.subField: <strong>63.2</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="217" src="https://glu.global/wp-content/uploads/2023/03/image-6-1024x217.png" alt="" class="wp-image-5830" srcset="https://glu.global/wp-content/uploads/2023/03/image-6-1024x217.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-6-300x64.png 300w, https://glu.global/wp-content/uploads/2023/03/image-6-768x163.png 768w, https://glu.global/wp-content/uploads/2023/03/image-6-50x11.png 50w, https://glu.global/wp-content/uploads/2023/03/image-6-1536x326.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-6.png 2008w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em><strong>transmissionDateAndTime</strong> from Date(NOW) parameter</em></figcaption></figure>



<p>This tells the GE that the <strong>transmissionDateAndTime</strong> parameter comes from Field #7 and is 10char.<br>This gives us the value above:&nbsp; <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>0322110540</strong></mark></p>



<p>That leaves the remainder of the payload to be broken down into the remaining parameters.</p>



<p>The parameters can then be used in requests to other systems in different protocols/content types as needed. Standard handler options are available for these values if required.</p>



<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Unmarshalling from Content of ISO8583 values</strong></h2>



<p>Further unmarshalling of the contents of an ISO8583 value is also possible. For example, XML sent inside ISO8583 can be unmarshalled by the path of the required value.</p>



<p><strong>Example:</strong></p>



<pre class="wp-block-code has-small-font-size"><code><em>&lt;isomsg direction="incoming"&gt;
	&lt;!-- org.jpos.iso.packager.GenericPackager&#91;packagerISO8583.xml] --&gt;
	&lt;field id="0" value="1210"/&gt;
	&lt;field id="3" value="310000"/&gt;
	&lt;field id="4" value="000000002000"/&gt;
	&lt;field id="7" value="0308134849"/&gt;
	&lt;isomsg id="<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">62</mark></strong>"&gt;
		&lt;!-- org.jpos.iso.packager.GenericSubFieldPackager --&gt;
		&lt;<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">field id="3</mark>"</strong>&gt;&lt;!&#91;CDATA&#91;18IFSFData3584&lt;IFSFData xmlns:ns0="http://www.nrf-arts.org/IXRetail/namespace"&gt;
	&lt;ProductSets&gt;
		&lt;MessageText&gt;~0011*      Terms and Conditions Apply      **    For queries contact Us    **     Customer Care 0860 30 40 50      *\&lt;/MessageText&gt;
		&lt;BalanceOfPoints&gt;000000020&lt;/BalanceOfPoints&gt;
		&lt;PointsForTransaction&gt;00000020&lt;/PointsForTransaction&gt;
		&lt;BasePointsEarned/&gt;
		&lt;AvailablePointsBalance&gt;0000002725&lt;/AvailablePointsBalance&gt;
		&lt;NewPointsBalance&gt;0000002725&lt;/NewPointsBalance&gt;
		&lt;PointsToMoneyRatio&gt;000100&lt;/PointsToMoneyRatio&gt;
		<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>&lt;RedemptionRefNumber&gt;167827&lt;/RedemptionRefNumber&gt;</strong></mark>
	&lt;/ProductSets&gt;
&lt;/IFSFData&gt;]]&gt;&lt;/field&gt;
	&lt;/isomsg&gt;
	&lt;field id="63" value="1CLRG4112033663407SLEV"/&gt;
&lt;/isomsg&gt;</em>

</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="223" src="https://glu.global/wp-content/uploads/2023/03/image-17-1024x223.png" alt="" class="wp-image-5864" srcset="https://glu.global/wp-content/uploads/2023/03/image-17-1024x223.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-17-300x65.png 300w, https://glu.global/wp-content/uploads/2023/03/image-17-768x167.png 768w, https://glu.global/wp-content/uploads/2023/03/image-17-50x11.png 50w, https://glu.global/wp-content/uploads/2023/03/image-17-1536x335.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-17.png 2037w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>Field 62.3</em></figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="245" src="https://glu.global/wp-content/uploads/2023/03/image-18-1024x245.png" alt="" class="wp-image-5865" srcset="https://glu.global/wp-content/uploads/2023/03/image-18-1024x245.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-18-300x72.png 300w, https://glu.global/wp-content/uploads/2023/03/image-18-768x183.png 768w, https://glu.global/wp-content/uploads/2023/03/image-18-50x12.png 50w, https://glu.global/wp-content/uploads/2023/03/image-18-1536x367.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-18.png 1947w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>XML inside Field 62.3</em></figcaption></figure>



<p>The path for <strong>RedemptionRefNumber </strong>is IFSFData.ProductSets.RedemptionRefNumber- this would return the specific value for that XML parameter: <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>167827</strong></mark></p>



<p></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Marshalling Example in GLU.Console</strong></h2>



<p>To respond to an ISO8583 request, the <strong>Marshalling</strong> is similar for simple payloads:</p>



<p>Specify the Field #:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="244" src="https://glu.global/wp-content/uploads/2023/03/image-8-1024x244.png" alt="" class="wp-image-5832" srcset="https://glu.global/wp-content/uploads/2023/03/image-8-1024x244.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-8-300x71.png 300w, https://glu.global/wp-content/uploads/2023/03/image-8-768x183.png 768w, https://glu.global/wp-content/uploads/2023/03/image-8-50x12.png 50w, https://glu.global/wp-content/uploads/2023/03/image-8-1536x366.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-8.png 2025w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Specify the parameter to be sent with parameter length:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="221" src="https://glu.global/wp-content/uploads/2023/03/image-10-1024x221.png" alt="" class="wp-image-5834" srcset="https://glu.global/wp-content/uploads/2023/03/image-10-1024x221.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-10-300x65.png 300w, https://glu.global/wp-content/uploads/2023/03/image-10-768x166.png 768w, https://glu.global/wp-content/uploads/2023/03/image-10-50x11.png 50w, https://glu.global/wp-content/uploads/2023/03/image-10-1536x332.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-10.png 2019w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>For parameters with variable length, the value can be left-padded with leading characters (usually) zero OR the length can be calculated and added to the header of that parameter.<br><br><strong>Create a value from other parameters:</strong></p>



<p>To build up a single ISO parameter from multiple GLU parameters you add them in sequence and specify the position each value has for the ISO parameter:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="321" src="https://glu.global/wp-content/uploads/2023/03/image-12-1024x321.png" alt="" class="wp-image-5838" srcset="https://glu.global/wp-content/uploads/2023/03/image-12-1024x321.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-12-300x94.png 300w, https://glu.global/wp-content/uploads/2023/03/image-12-768x241.png 768w, https://glu.global/wp-content/uploads/2023/03/image-12-50x16.png 50w, https://glu.global/wp-content/uploads/2023/03/image-12-1536x481.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-12.png 2020w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>Amount Value creation</em></figcaption></figure>



<p>This creates an ISO amount format with additional ISO info: accountType, currency etc:</p>



<ul class="wp-block-list">
<li>Field[54] : 1002800C000002079748</li>
</ul>



<p>Broken down from the above:</p>



<ul class="wp-block-list">
<li>10 = accountType</li>



<li>02 = amountType</li>



<li>800 =currencyISOUGS (ISO currencyCode)</li>



<li>C = amountSign (Credit or Debit)</li>



<li>00000<strong>2079748</strong> = amountTransaction – this is an amount of <strong>2079748</strong>, left padded with zeros to fill the required char count for the field. This value was previously rounded in the Derived Parameter.</li>
</ul>



<p></p>



<h3 class="wp-block-heading"><strong>Length Calculation</strong></h3>



<p><strong>NOTE:</strong> There&#8217;s a function for this- see here: <a href="https://glu.global/glu-guide/glu-functions/#get-iso-message-with-lengths-function" data-type="link" data-id="https://glu.global/glu-guide/glu-functions/#get-iso-message-with-lengths-function">https://glu.global/glu-guide/glu-functions/#get-iso-message-with-lengths-function</a></p>



<ol class="wp-block-list">
<li>Get the Length:</li>
</ol>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="250" src="https://glu.global/wp-content/uploads/2023/03/image-13-1024x250.png" alt="" class="wp-image-5839" srcset="https://glu.global/wp-content/uploads/2023/03/image-13-1024x250.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-13-300x73.png 300w, https://glu.global/wp-content/uploads/2023/03/image-13-768x188.png 768w, https://glu.global/wp-content/uploads/2023/03/image-13-50x12.png 50w, https://glu.global/wp-content/uploads/2023/03/image-13-1536x375.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-13.png 2015w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>2. Get length of the length (how many char for fieldLength):</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="244" src="https://glu.global/wp-content/uploads/2023/03/image-14-1024x244.png" alt="" class="wp-image-5840" srcset="https://glu.global/wp-content/uploads/2023/03/image-14-1024x244.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-14-300x72.png 300w, https://glu.global/wp-content/uploads/2023/03/image-14-768x183.png 768w, https://glu.global/wp-content/uploads/2023/03/image-14-50x12.png 50w, https://glu.global/wp-content/uploads/2023/03/image-14-1536x367.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-14.png 2007w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>3. Marshall these values into the required parameter:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="253" src="https://glu.global/wp-content/uploads/2023/03/image-15-1024x253.png" alt="" class="wp-image-5841" srcset="https://glu.global/wp-content/uploads/2023/03/image-15-1024x253.png 1024w, https://glu.global/wp-content/uploads/2023/03/image-15-300x74.png 300w, https://glu.global/wp-content/uploads/2023/03/image-15-768x190.png 768w, https://glu.global/wp-content/uploads/2023/03/image-15-50x12.png 50w, https://glu.global/wp-content/uploads/2023/03/image-15-1536x379.png 1536w, https://glu.global/wp-content/uploads/2023/03/image-15.png 2020w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Template:</strong></p>



<p><em>18IFSFData${<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>lengthField12722Length</strong></mark>}${<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>Field12722Length</strong></mark>}${<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>Field12722AllData</strong></mark>}</em></p>



<p><strong>Value:</strong><br><em>Field[127.22] :<br>18IFSFData<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">3</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">588</mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">&lt;IFSFData xmlns:ns0=&#8221;http://www.nrf-arts.org/IXRetail/namespace&#8221;&gt;&lt;ProductSets&gt;&lt;MessageText&gt;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Terms and Conditions Apply&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **&nbsp;&nbsp;&nbsp; For queries contact <strong>Pick n Pay</strong>&nbsp;&nbsp;&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp; Customer Care 0800 11 22 88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&lt;/MessageText&gt;&lt;BalanceOfPoints&gt;46047&lt;/BalanceOfPoints&gt;&lt;PointsForTransaction&gt;0000215&lt;/PointsForTransaction&gt;&lt;BasePointsEarned&gt;0&lt;/BasePointsEarned&gt;&lt;AvailablePointsBalance&gt;0000046262&lt;/AvailablePointsBalance&gt;&lt;NewPointsBalance&gt;0000046262&lt;/NewPointsBalance&gt;&lt;PointsToMoneyRatio&gt;000100&lt;/PointsToMoneyRatio&gt;&lt;RedemptionRefNumber&gt;BP0000049184&lt;/RedemptionRefNumber&gt;&lt;/ProductSets&gt;&lt;/IFSFData&gt;</mark></em></p>



<ul class="wp-block-list">
<li>The Blue Text is the Value (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>AllData</strong></mark>)</li>



<li>The <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">588</mark></strong> is the length of <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>AllData</strong></mark> ((number of characters for the <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>AllData</strong></mark> value)</li>



<li>The <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">3</mark></strong> is the length (number of characters for the <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">588</mark></strong> length value)</li>
</ul>



<p><strong>NOTE:</strong> There&#8217;s a function for this- see here: <a href="https://glu.global/glu-guide/glu-functions/#get-iso-message-with-lengths-function" data-type="link" data-id="https://glu.global/glu-guide/glu-functions/#get-iso-message-with-lengths-function">https://glu.global/glu-guide/glu-functions/#get-iso-message-with-lengths-function</a></p>



<h2 class="wp-block-heading has-medium-font-size"><strong>ISO Exception Handling</strong></h2>



<p>The GLU Connector settings (Step 2 when configuring your ISO8583 Connector) provide a configuration option that will turn a property &#8211; ignoreISOException &#8211; on / off. If &#8216;on&#8217; the GLU.Engine will ignore ISO Exceptions such that those ISO Exceptions do not cause the GE to drop its connection to the Server.</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>ISO8583 Log Examples</strong></h2>



<p>In addition to the &#8216;normal&#8217; GLU.Engine logs, since GLU.Ware uses Q2 (the QSP version 2 container within jPOS), Q2 logs generated by GLU.Engines that have ISO8583 connectors. The Q2 logs should be used to trace jPOS Channel activity. These can be used in conjunction with the gluware.log files. </p>



<p>Q2 logs (saved a <strong>q2.log</strong> files) are generated in an ISO8583 GLU.Engine. This happens before ISO8583 payloads are ingested into the GLU.Engine and prior to those events being printed in the gluware.log.</p>



<p>Any investigation into an ISO8583 issue should start with the q2.log. The q2.log uses the specified packager to validate payloads.</p>



<p><sub><em>&lt;isomsg direction=&#8221;incoming&#8221;&gt;<br>  &lt;!&#8211; org.jpos.iso.packager.GenericPackager[packagerISO8583.xml] &#8211;&gt;<br>  &lt;field id=&#8221;0&#8243; value=&#8221;1200&#8243;/&gt;<br>  &lt;field id=&#8221;3&#8243; value=&#8221;310000&#8243;/&gt;<br>  &lt;field id=&#8221;4&#8243; value=&#8221;000000002000&#8243;/&gt;<br>  &lt;field id=&#8221;7&#8243; value=&#8221;0308131930&#8243;/&gt;<br>  &lt;field id=&#8221;11&#8243; value=&#8221;167827&#8243;/&gt;<br>  &lt;field id=&#8221;12&#8243; value=&#8221;230308011930&#8243;/&gt;<br>  &lt;field id=&#8221;22&#8243; value=&#8221;123456789112&#8243;/&gt;<br>  &lt;field id=&#8221;49&#8243; value=&#8221;200&#8243;/&gt;<br>  &lt;field id=&#8221;59&#8243; value=&#8221;292&#8243;/&gt;<br>  &lt;field id=&#8221;63&#8243; value=&#8221;1CLRG4112033663407SLEV&#8221;/&gt;<br>&lt;/isomsg&gt;</em></sub></p>



<p>When something goes wrong you might see an <strong>error packing/unpacking field X</strong>:</p>



<pre class="wp-block-code has-small-font-size"><code><em>&lt;session-error&gt;
    &lt;iso-exception&gt;
      org.jpos.iso.IFA_LLCHAR: <strong>Problem unpacking field 12</strong> (org.jpos.iso.ISOException: <strong>Field length 98 too long</strong>. Max: 25) <strong>unpacking field=127</strong></em></code></pre>



<p>This is saying <strong>Field 127.12</strong> is too long. This can be misleading &#8211; if any of the fields sent have different length compared to what the packager is expecting, the first field to fail will print in the log.  In this case, an extra Field was being sent- this skewed the unmarshalling/packager validation of subsequent Fields.</p>



<p>The best troubleshooting approach is to get the request message that was sent to compare it to what the packager supports/requires and what the config in the GLU.Engine is looking for. If the 3rd party is anable to change their request, the packager can be updated to cater for their payload. </p>



<p>If the extra parameter is required for further use in the GLU.Engine, it can be unmarshalled. If it&#8217;s not required, the GLU.Engine can pass the value through without unmarshalling.</p>



<p><strong>If there is no error in the q2.log, troubleshooting can continue with the gluware.log:</strong><br>Standard Unmarshalling, Handler, Derived values and protocol translation issues or errors will print in the gluware.log.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TCP/IP Connectors</title>
		<link>https://glu.global/glu-guide/tcp-ip-connectors/</link>
		
		<dc:creator><![CDATA[Owen Meredith]]></dc:creator>
		<pubDate>Thu, 26 Jan 2023 16:38:13 +0000</pubDate>
				<guid isPermaLink="false">https://glu.global/?post_type=ht_kb&#038;p=3383</guid>

					<description><![CDATA[Context TCP/IP is an abbreviation for Transmission Control Protocol / Internet Protocol. It is a set of protocols that define how two or more computers can communicate with each other. The protocol is effectively a set of rules that describe how the data is passed between the computers. It is an open standard so can [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading has-medium-font-size"><strong>Context</strong></h1>



<p>TCP/IP is an abbreviation for Transmission Control Protocol / Internet Protocol. It is a set of protocols that define how two or more computers can communicate with each other. The protocol is effectively a set of rules that describe how the data is passed between the computers. It is an open standard so can be implemented on any computer with the appropriate physical attributes.&nbsp;</p>



<h1 class="wp-block-heading has-medium-font-size"><strong>Properties Tab</strong></h1>



<p>If Properties need to set for the TCP connector, for example for a TCP/IP connector to an HSM the <em><strong>key = textline</strong></em> must be set to the<em> <strong>value =  true</strong></em> as shown in the example below.</p>



<p></p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="691" height="426" src="https://glu.global/wp-content/uploads/2023/02/image-194.png" alt="" class="wp-image-5683" srcset="https://glu.global/wp-content/uploads/2023/02/image-194.png 691w, https://glu.global/wp-content/uploads/2023/02/image-194-300x185.png 300w, https://glu.global/wp-content/uploads/2023/02/image-194-50x31.png 50w" sizes="auto, (max-width: 691px) 100vw, 691px" /></figure></div>


<p></p>



<p>As another example, by default, TCP/IP Connectors are asynchronous. If you require the Connector to be synchronous, the <em><strong>key = synchronous</strong></em> must be set to the<em> </em><strong><em>value =  true</em>.</strong></p>



<p></p>



<h1 class="wp-block-heading has-medium-font-size"><strong>Decoder / Encoder Configuration</strong></h1>



<p></p>



<p>As a final, slightly more complex example, a messages sent over <strong>TCP/IP</strong> include a variable byte length header known as the <strong>Variable Length Indicator (VLI)</strong>, proper configuration of the decoder and encoder is important. Here&#8217;s how to handle such requirements:</p>



<p><strong>Variable Length Indicator (VLI):</strong></p>



<ul class="wp-block-list">
<li>Typically consisting of 2 bytes, the VLI precedes every message sent to or from the TCP/IP endpoint.</li>



<li>Bytes 1-2 indicate the number of bytes in the message, excluding the first 2 bytes.</li>



<li>These 2 bytes represent a 16-bit unsigned integer in network byte order.</li>



<li>Note: If the message is compressed before transmission, it must first be compressed to determine its length. As an example, suppose that you were to look at just the text (excluding the 2 byte header) making up an XML message from a particular example and that you then counted the characters and they happened to add up to 299 characters. If you took a scientific calculator (the one in Windows for example) and you typed in 299 with &#8220;Dec&#8221; (for decimal) selected, then you select &#8220;Hex&#8221;, the value that would be shown is &#8220;12B&#8221;, which means the same as 01 2B, which is exactly what one would expect to see for the first two bytes of the message if the message had been dumped to a file and then opened with a hex editor.</li>
</ul>



<p></p>



<p><strong>Configuration Properties:</strong></p>



<ul class="wp-block-list">
<li>Configure the decoder type as<strong> &#8216;StringDecoder&#8217;</strong> and the encoder as <strong>&#8216;LengthFieldPrepender&#8217;</strong>.</li>



<li>Set the length to &#8216;2&#8217; to handle the 2-byte VLI.</li>



<li>Additionally, set the property &#8216;useByteBuf&#8217; to &#8216;true&#8217;. This instructs GLU to convert the message body into ByteBuf before transmission, allowing for efficient byte-level manipulation.</li>
</ul>



<ol class="wp-block-list"></ol>



<p><br>In the screenshot below the above described Decoder / Encoder and Field Length settings are shown. Additionally you&#8217;ll see the TCI/IP property <em><strong>key = usebyteBuf</strong></em> is set to <em><strong>value = true</strong></em> &#8230; with this setting GLU will turn the message body into ByteBuf before sending it out. Just like an ordinary primitive byte array, ByteBuf uses zero-based indexing. It means the index of the first byte is always 0 and the index of the last byte is always capacity &#8211; 1.</p>



<p></p>



<p></p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="689" height="481" src="https://glu.global/wp-content/uploads/2023/02/image-195.png" alt="" class="wp-image-5684" srcset="https://glu.global/wp-content/uploads/2023/02/image-195.png 689w, https://glu.global/wp-content/uploads/2023/02/image-195-300x209.png 300w, https://glu.global/wp-content/uploads/2023/02/image-195-50x35.png 50w" sizes="auto, (max-width: 689px) 100vw, 689px" /></figure></div>


<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
