{"id":5010,"date":"2023-10-20T00:13:52","date_gmt":"2023-10-20T00:13:52","guid":{"rendered":"https:\/\/dalelane.co.uk\/blog\/?p=5010"},"modified":"2023-10-20T20:07:58","modified_gmt":"2023-10-20T20:07:58","slug":"connecting-app-connect-enterprise-to-event-endpoint-management","status":"publish","type":"post","link":"https:\/\/dalelane.co.uk\/blog\/?p=5010","title":{"rendered":"Connecting App Connect Enterprise to Event Endpoint Management"},"content":{"rendered":"<p><strong>Configuring IBM App Connect Enterprise to consume messages from Kafka topics in IBM Event Endpoint Management requires careful configuration. In this post, I&#8217;ll share the steps I use that help me to avoid missing any required values.<\/strong><\/p>\n<p>If this sounds familiar, it might be because I wrote a post like this about <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=4573\">using App Connect Enterprise to work with topics from Event Streams<\/a>. People seem to have found that post useful, so I thought I&#8217;d do something similar for topics in Event Endpoint Management this time.<\/p>\n<p>To illustrate this, I&#8217;ll create a simple App Connect flow that consumes messages from a Kafka topic and publish them to an MQTT topic.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/01-aceflow-overview.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/01-aceflow-overview.png\" width=\"450\"\/><\/a><\/p>\n<p>The key to getting this to work correctly first time is to make sure that values are accurately copied from Event Endpoint Management to App Connect.<\/p>\n<p>To help with this, I use a grid like the one below.<\/p>\n<p>The instructions in this post start with Event Endpoint Management, and explain how to populate the grid with the information you need.<\/p>\n<p>Then the instructions will switch to App Connect, and explain how to use the values in the grid to set up your App Connect flow.<\/p>\n<style>table.aceesgrid { border-collapse: collapse; table-layout: fixed; width: 450px; } table.aceesgrid, .aceesgrid th, .aceesgrid td { font-size: 9.5px; text-align: center; border: thin black solid; } .aceesgrid th { background-color: #f1f1f1; } .aceesgrid th, .aceesgrid td { padding: 3px; } .aceesgrid th.examples { width: 190px; } .aceesgrid td.examples { max-width: 190px; width: 100%; text-align: left; overflow: auto; } .aceesgrid td.examples > div { hyphens: none; -webkit-hyphens: none; margin: 0; padding: 0; max-width: 190px; width: 100%; text-align: left; font-size: 9px; font-family: 'Courier New', Courier, monospace; } .aceesgrid td.label { padding: 5px 8px; width: 60px; } <\/style>\n<table class=\"aceesgrid\">\n<thead>\n<tr>\n<th style=\"width: 18px;\"><\/th>\n<th style=\"width: 60px;\">What this is<\/th>\n<th class=\"examples\">Values you will see in my screenshots<\/th>\n<th>Your value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>A<\/strong><\/td>\n<td class=\"label\">Topic name<\/td>\n<td class=\"examples\">\n<div>DEMO.ACE<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>B<\/strong><\/td>\n<td class=\"label\">Bootstrap address<\/td>\n<td class=\"examples\">\n<div>my-eem-gateway-ibm-egw-rt-event-automation.apps.dalelane.cp.fyre.ibm.com:443<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>C<\/strong><\/td>\n<td class=\"label\">SASL mechanism<\/td>\n<td class=\"examples\">\n<div>PLAIN<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>D<\/strong><\/td>\n<td class=\"label\">SASL config<\/td>\n<td class=\"examples\">\n<div>org.apache.kafka.common.security.plain.PlainLoginModule&nbsp;required;<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>E<\/strong><\/td>\n<td class=\"label\">Security protocol<\/td>\n<td class=\"examples\">\n<div>SASL_SSL<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>F<\/strong><\/td>\n<td class=\"label\">Certificate<\/td>\n<td class=\"examples\">\n<div>eem-cert.jks<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>G<\/strong><\/td>\n<td class=\"label\">Certificate password<\/td>\n<td class=\"examples\">\n<div>STOREPASSW0RD<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>H<\/strong><\/td>\n<td>Username<\/td>\n<td class=\"examples\">\n<div>eem-9c8fc5d9-fddd-48dd-ab41-e062214166e5<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>I<\/strong><\/td>\n<td>Password<\/td>\n<td class=\"examples\">\n<div>dd08a1fc-99be-4931-8059-70aef88c1f0c<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>J<\/strong><\/td>\n<td class=\"label\">Policy project name<\/td>\n<td class=\"examples\">\n<div>demo-policies<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>K<\/strong><\/td>\n<td class=\"label\">Policy name<\/td>\n<td class=\"examples\">\n<div>demo-eem-policy<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>L<\/strong><\/td>\n<td class=\"label\">Security identity name<\/td>\n<td class=\"examples\">\n<div>eem-credentials<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>M<\/strong><\/td>\n<td class=\"label\">Truststore identity name<\/td>\n<td class=\"examples\">\n<div>eem-truststore<\/div>\n<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!--more--><\/p>\n<p><em>Note: To see screenshots in more detail, you can click on them to open a higher-resolution version.<\/em><\/p>\n<h3>Pre-requisites<\/h3>\n<p>You have found a topic in Event Endpoint Management that you want to use App Connect to consume messages from.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/02-eem-catalog.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/02-eem-catalog.png\" width=\"450\"\/><\/a><\/p>\n<p>Before you start, to enable compatibility with the Kafka consumer in App Connect Enterprise, you will need to enable support for TLSv1.2 in the Event Endpoint Management gateway.<\/p>\n<p>You can do this by <a href=\"https:\/\/ibm.github.io\/event-automation\/eem\/installing\/configuring\/#setting-environment-variables\">adding an environment variable<\/a> to your <code>EventGateway<\/code> custom resource.<\/p>\n<pre>env:\n- name: TLS_VERSIONS\n  value: 'TLSv1.2,TLSv1.3'<\/pre>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/27-envvar.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/27-envvar.png\" width=\"450\"\/><\/a><\/p>\n<h3>Step 1<br \/>\nCollecting values you need from Event Endpoint Management<\/h3>\n<h4>A &#8211; the topic name<\/h4>\n<p>Get the name of the topic you want App Connect to consume messages from.<\/p>\n<p>Fill this in the grid as <strong>value A<\/strong>.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/03-topic-name.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/03-topic-name.png\" width=\"450\"\/><\/a><\/p>\n<h4>B &#8211; the bootstrap address<\/h4>\n<p>Get the bootstrap address of the Event Endpoint Management gateway that App Connect will use to connect to.<\/p>\n<p>Click on the copy button next to the Servers address.<\/p>\n<p>Fill the copied value in the grid as <strong>value B<\/strong>.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/04-bootstrap.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/04-bootstrap.png\" width=\"450\"\/><\/a><\/p>\n<h4>C &#8211; security mechanism<\/h4>\n<p>The Event Endpoint Management gateway supports SASL\/PLAIN.<\/p>\n<p>Fill <code>PLAIN<\/code> in the grid as <strong>value C<\/strong>.<\/p>\n<h4>D &#8211; security config<\/h4>\n<p>The Event Endpoint Management gateway supports SASL\/PLAIN.<\/p>\n<p>Fill <code>org.apache.kafka.common.security.plain.PlainLoginModule&nbsp;required;<\/code> in the grid as <strong>value D<\/strong>.<\/p>\n<h4>E &#8211; security protocol<\/h4>\n<p>The Event Endpoint Management gateway supports SASL\/PLAIN.<\/p>\n<p>Fill <code>SASL_SSL<\/code> in the grid as <strong>value E<\/strong>.<\/p>\n<h4>F &#8211; SSL certificate<\/h4>\n<p>The Event Endpoint Management gateway requires encrypted connections, so you need to download the CA certificate for the listener.<\/p>\n<p>Download the PEM certificate from the Event Endpoint Management catalog.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/05-certificate.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/05-certificate.png\" width=\"450\"\/><\/a><\/p>\n<p>App Connect Enterprise doesn&#8217;t support PEM files, so you need to convert this downloaded file into one of the supported formats, such as <code>JKS<\/code>.<\/p>\n<p>For example:<\/p>\n<pre>keytool -importcert -noprompt \\\n        -alias \"eem-ca\" \\\n        -file your-downloaded-cert.pem \\\n        -keystore eem-cert.jks \\\n        -storetype JKS -storepass STOREPASSW0RD<\/pre>\n<p>Keep this file safe, and make a note of the file name in the grid as <strong>value F<\/strong>.<\/p>\n<p>Fill in the password you use for the truststore (which I have as <code>STOREPASSW0RD<\/code> in my example command above) in the grid as <strong>value G<\/strong>.<\/p>\n<h4>H\/I &#8211; username \/ password<\/h4>\n<p>Click on the Generate access credentials button.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/06-credentials.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/06-credentials.png\" width=\"450\"\/><\/a><\/p>\n<p>Once you&#8217;ve provided your contact details, a new username and password will be generated for you.<\/p>\n<p>Enter the generated username into the grid as <strong>value H<\/strong>.<\/p>\n<p>Enter the generated password into the grid as <strong>value I<\/strong>.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/07-credentials.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/07-credentials.png\" width=\"450\"\/><\/a><\/p>\n<h3>Step 2<br \/>\nChoose some App Connect names<\/h3>\n<p>You will create some resources in App Connect.<\/p>\n<p>Choose a name for your App Connect policy project.<br \/>\nEnter it into the grid as <strong>value J<\/strong>.<\/p>\n<p>Choose a name for your App Connect policy.<br \/>\nEnter it into the grid as <strong>value K<\/strong>.<\/p>\n<p>Choose a name for the security identity you will use to store the username and password.<br \/>\nEnter it into the grid as <strong>value L<\/strong>.<\/p>\n<p>Choose a name for the security identity you will use to store the truststore password.<br \/>\nEnter it into the grid as <strong>value M<\/strong>.<\/p>\n<h3>Step 3<br \/>\nCreating your App Connect policy<\/h3>\n<p>Use the App Connect Enterprise toolkit to create a new Policy project.<\/p>\n<p>Use the name from <strong>value J<\/strong> in the grid for the name.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/large\/03-acepolicy-01-project.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/small\/03-acepolicy-01-project.png\" width=\"450\"\/><\/a><\/p>\n<p>Create a policy in your new project. Use <strong>value K<\/strong> from the grid as the file name.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/08-ace-policy.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/08-ace-policy.png\" width=\"450\"\/><\/a><\/p>\n<p>Make sure that the policy name matches <strong>value K<\/strong> from the grid.<\/p>\n<p>Set the policy Type and Template both to &#8220;Kafka&#8221;.<\/p>\n<p>Fill in the rest of the policy using values from the grid.<\/p>\n<p>Set Bootstrap servers (<code>&lt;bootstrapServers&gt;<\/code>) to <strong>value B<\/strong> from the grid.<\/p>\n<p>Set Security protocol (<code>&lt;securityProtocol&gt;<\/code>) to <strong>value E<\/strong> from the grid.<\/p>\n<p>Set SASL Mechanism (<code>&lt;saslMechanism&gt;<\/code>) to <strong>value C<\/strong> from the grid.<\/p>\n<p>Set SSL protocol (<code>&lt;sslProtocol&gt;<\/code>) to <strong>TLSv1.2<\/strong>.<\/p>\n<p>Set Security identity (<code>&lt;securityIdentity&gt;<\/code>) to <strong>value L<\/strong> from the grid.<\/p>\n<p>Set SASL config (<code>&lt;saslConfig&gt;<\/code>) to <strong>value D<\/strong> from the grid.<\/p>\n<p>Set SSL truststore location (<code>&lt;sslTruststoreLocation&gt;<\/code>) to <code>\/home\/aceuser\/truststores\/<\/code> followed by your filename.<br \/>\n(e.g. <code>\/home\/aceuser\/truststores\/eem-cert.jks<\/code>).<\/p>\n<p>Set SSL truststore type (<code>&lt;sslTruststoreType&gt;<\/code>) to <code>JKS<\/code> (if you created a jks file) or <code>PKCS12<\/code> (if you created a p12 file).<\/p>\n<p>Set SSL truststore security identity<br \/>\n(<code>&lt;sslTruststoreSecurityIdentity&gt;<\/code>) to <strong>value M<\/strong> from the grid.<\/p>\n<p>Set SSL certificate hostname checking<br \/>\n(<code>&lt;sslEnableCertificateHostnameChecking&gt;<\/code>) to <code>true<\/code>.<\/p>\n<p>It should look something like this:<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/09-example-policy.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/09-example-policy.png\" width=\"450\"\/><\/a><\/p>\n<p>Export the policy project to a zip file.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/large\/03-acepolicy-06-export-wizard.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/small\/03-acepolicy-06-export-wizard.png\" width=\"450\"\/><\/a><\/p>\n<p>The file name you use isn&#8217;t significant, so choose any name that you like.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/10-export-policy.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/10-export-policy.png\" width=\"450\"\/><\/a><\/p>\n<h3>Step 4<br \/>\nCreating your App Connect flow<\/h3>\n<p>To illustrate how to use the grid, I created a flow that sends data received from the Kafka topic to an MQTT topic.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/01-aceflow-overview.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/01-aceflow-overview.png\" width=\"450\"\/><\/a><\/p>\n<p>Start by creating a <strong>KafkaConsumer<\/strong> node.<\/p>\n<p>Configure the Kafka node, starting with the &#8220;Basic&#8221; tab.<\/p>\n<p>Set Topic name to <strong>value A<\/strong> from the grid.<\/p>\n<p>The Bootstrap servers value won&#8217;t be used, but it&#8217;s a required value, so put any value in there. I use &#8220;not-used&#8221; for this to avoid confusion.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/11-kafkanode-basic.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/11-kafkanode-basic.png\" width=\"450\"\/><\/a><\/p>\n<p>Next, fill in the &#8220;Security&#8221; tab.<\/p>\n<p>Set Security identity to <strong>value L<\/strong> from the grid.<\/p>\n<p>Set Security protocol to <strong>value E<\/strong> from the grid.<\/p>\n<p>Set SSL protocol to <strong>TLSv1.2<\/strong>.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/12-kafkanode-security.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/12-kafkanode-security.png\" width=\"450\"\/><\/a><\/p>\n<p>Finally, fill in the &#8220;Policy&#8221; tab.<\/p>\n<p>Set Policy using <strong>value J<\/strong> and <strong>value K<\/strong> from the grid. It should look like <code>{valueJ}:valueK<\/code>.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/13-kafkanode-policy.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/13-kafkanode-policy.png\" width=\"450\"\/><\/a><\/p>\n<p>For this demo, I&#8217;m publishing the messages received from the Event Endpoint Management topic to an MQTT topic.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/14-mqtt.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/14-mqtt.png\" width=\"450\"\/><\/a><\/p>\n<p>Export the app with your flow to a BAR file.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/15-barfile.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/15-barfile.png\" width=\"450\"\/><\/a><\/p>\n<h3>Step 5<br \/>\nSet up App Connect<\/h3>\n<h4>Create an App Connect dashboard<\/h4>\n<p>This will make it easier to deploy your App Connect flow.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/16-dashboard.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/16-dashboard.png\" width=\"450\"\/><\/a><\/p>\n<h4>Add the Configurations to the dashboard<\/h4>\n<p>Use the Dashboard to create Configurations.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/large\/05-appconnect-02-create-configuration.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/small\/05-appconnect-02-create-configuration.png\" width=\"450\"\/><\/a><\/p>\n<p>Create a new Configuration.<\/p>\n<p>Set the Type to &#8220;Truststore&#8221; and upload your truststore file.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/17-truststore.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/17-truststore.png\" width=\"450\"\/><\/a><\/p>\n<p>Create another new Configuration.<br \/>\nSet the Type to &#8220;Policy project&#8221; and upload your exported policy project zip file.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/18-policy.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/18-policy.png\" width=\"450\"\/><\/a><\/p>\n<p>Create another new Configuration.<br \/>\nSet the Type to &#8220;setdbparms.txt&#8221;.<\/p>\n<p>Add a line with <code>kafka::<\/code> followed by the security identity name for the credentials, then a space, then the username and password.<\/p>\n<pre>kafka::valueL valueH valueI<\/pre>\n<p>Add a line with <code>truststore::<\/code> followed by the security identity name for the truststore, then a space, then an unused placeholder value, then the truststore password.<\/p>\n<pre>truststore::valueM notused valueG<\/pre>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/19-setdbparms.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/19-setdbparms.png\" width=\"450\"\/><\/a><\/p>\n<p>You should now have three configurations.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/20-configurations.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/20-configurations.png\" width=\"450\"\/><\/a><\/p>\n<h4>Upload the BAR file to the dashboard<\/h4>\n<p>Use the Dashboard to upload a bar file.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/large\/05-appconnect-07-bar.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"http:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/small\/05-appconnect-07-bar.png\" width=\"450\"\/><\/a><\/p>\n<p>Import the bar file that you created with the Kafka message flow.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/large\/05-appconnect-08-bar.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/small\/05-appconnect-08-bar.png\" width=\"450\"\/><\/a><\/p>\n<h3>Step 6<br \/>\nDeploy the message flow<\/h3>\n<p>Use the Dashboard to create a new integration server.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/21-runtimes.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/21-runtimes.png\" width=\"450\"\/><\/a><\/p>\n<p>Note that creating an integration server with CPU and memory limits that are too small can result in SSL handshake errors when connecting to Kafka. If this happens, try different CPU and memory limits. For example, setting CPU limit to at least 1 and memory to at least 512Mi may help.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/22-integrationserver.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/22-integrationserver.png\" width=\"450\"\/><\/a><\/p>\n<p>Choose your BAR file<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/23-bar.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/23-bar.png\" width=\"450\"\/><\/a><\/p>\n<p>Enable all of the Configurations that you created<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/24-configurations.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/24-configurations.png\" width=\"450\"\/><\/a><\/p>\n<p>Name the integration and click Create.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/25-createserver.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/25-createserver.png\" width=\"450\"\/><\/a><\/p>\n<h3>Step 7 &#8211; Try it out!<\/h3>\n<p>Your App Connect flow should now be consuming messages from the Kafka topic you discovered in Event Endpoint Management.<\/p>\n<p>I verified my flow by creating a simple MQTT subscriber &#8211; I immediately saw events from the Kafka topic start to show up.<\/p>\n<p><a target=\"screenshot\" href=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/large\/26-demo.png\" rel=\"noopener\"><img decoding=\"async\" style=\"border: thin black solid\" src=\"https:\/\/github.com\/dalelane\/ace-es-intro\/raw\/master\/eem-demo\/small\/26-demo.png\" width=\"450\"\/><\/a><\/p>\n<p>(<em>If you want to know more about the MQTT app I&#8217;m using here, see my post on <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=4974\">creating an MQTT extension for Scratch<\/a><\/em>.)<\/p>\n<p>Finished! Using a grid like the one detailed here should hopefully ensure that you have it working first time, without a lot of time-consuming errors and debugging.<\/p>\n<style>code, pre { color: #770000; font-weight: 600; background-color: #ffffc0 } <\/style>\n","protected":false},"excerpt":{"rendered":"<p>Configuring IBM App Connect Enterprise to consume messages from Kafka topics in IBM Event Endpoint Management requires careful configuration. In this post, I&#8217;ll share the steps I use that help me to avoid missing any required values. If this sounds familiar, it might be because I wrote a post like this about using App Connect [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5011,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[593,604,584],"class_list":["post-5010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ibm","tag-apachekafka","tag-appconnect","tag-kafka"],"_links":{"self":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5010"}],"version-history":[{"count":0,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5010\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/media\/5011"}],"wp:attachment":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}