RabbitMQ in Gateway script

I've the following (amqp-client-5.9.0.jar) amqp jar file in the C:\Program Files\Inductive Automation\Ignition\user-lib


I've also added the same in C:\Program Files\Inductive Automation\Ignition\user-lib\third-party

Now I've written the following script in the Scripting -> Gateway Events -> Startup

# Gateway Startup Script - Minimal Dependencies Version
import sys
from com.rabbitmq.client import ConnectionFactory, Channel
import threading
import time

# Global variables
rabbitmq_connection = None
rabbitmq_channel = None

def initialize_rabbitmq():
    """Initialize RabbitMQ connection"""
    global rabbitmq_connection, rabbitmq_channel
    
    try:
        factory = ConnectionFactory()
        factory.setHost("localhost")
        factory.setPort(5672)
        factory.setUsername("admin")  # Change if you created custom user
        factory.setPassword("password123")  # Change if you created custom user
        factory.setVirtualHost("/")
        
        # Disable automatic recovery to avoid logging dependencies
        factory.setAutomaticRecoveryEnabled(False)
        
        rabbitmq_connection = factory.newConnection()
        rabbitmq_channel = rabbitmq_connection.createChannel()
        
        # Declare exchange and queue
        rabbitmq_channel.exchangeDeclare("ignition_exchange", "direct", True)
        rabbitmq_channel.queueDeclare("ignition_data_queue", True, False, False, None)
        rabbitmq_channel.queueBind("ignition_data_queue", "ignition_exchange", "data")
        
        print("RabbitMQ connection established successfully")
        return True
        
    except Exception as e:
        print("Failed to initialize RabbitMQ: " + str(e))
        return False


# Initialize on startup
initialize_rabbitmq()

However, upon loading the gateway I get the following error in logs

com.inductiveautomation.ignition.common.script.JythonExecException: Traceback (most recent call last): File "<[TestProject] Startup Script>", line 3, in ImportError: No module named rabbitmq

at org.python.core.Py.ImportError(Py.java:327)

at org.python.core.imp.import_logic(imp.java:1292)

at org.python.core.imp.import_module_level(imp.java:1371)

at org.python.core.imp.importName(imp.java:1544)

at org.python.core.ImportFunction.call(builtin.java:1285)

at org.python.core.PyObject.call(PyObject.java:433)

at org.python.core.builtin.import(builtin.java:1232)

at org.python.core.imp.importFromAs(imp.java:1636)

at org.python.core.imp.importFrom(imp.java:1611)

at org.python.pycode._pyx1.f$0(<[TestProject] Startup Script>:85)

at org.python.pycode._pyx1.call_function(<[TestProject] Startup Script>)

at org.python.core.PyTableCode.call(PyTableCode.java:173)

at org.python.core.PyCode.call(PyCode.java:18)

at org.python.core.Py.runCode(Py.java:1703)

at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:804)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runCode(ProjectScriptLifecycle.java:859)

at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:773)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runCode(ProjectScriptLifecycle.java:850)

at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:740)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runCode(ProjectScriptLifecycle.java:831)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.runStartupScript(ProjectScriptLifecycle.java:374)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.runStartupScript(ProjectScriptLifecycle.java:341)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.startupScriptConfig(ProjectScriptLifecycle.java:239)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.restartScriptConfig(ProjectScriptLifecycle.java:231)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.onResourcesModified(ProjectScriptLifecycle.java:733)

at com.inductiveautomation.ignition.gateway.project.ProjectLifecycle$LifecycleResourceListener.resourcesModified(ProjectLifecycle.java:176)

at com.inductiveautomation.ignition.common.project.AbstractProject.notifyResourceListeners(AbstractProject.java:351)

at com.inductiveautomation.ignition.common.project.AbstractProject.updateEffectiveState(AbstractProject.java:153)

at com.inductiveautomation.ignition.common.project.RuntimeProject.applyChange(RuntimeProject.java:274)

at com.inductiveautomation.ignition.gateway.project.ProjectLifecycleFactory$1.lambda$updateOrStartAffectedProjects$5(ProjectLifecycleFactory.java:185)

at java.base/java.util.ArrayList.forEach(Unknown Source)

at com.inductiveautomation.ignition.gateway.project.ProjectLifecycleFactory$1.updateOrStartAffectedProjects(ProjectLifecycleFactory.java:165)

at com.inductiveautomation.ignition.gateway.project.ProjectLifecycleFactory$1.projectUpdated(ProjectLifecycleFactory.java:143)

at com.inductiveautomation.ignition.gateway.project.BaseProjectManager.doProjectUpdatedNotification(BaseProjectManager.java:1055)

at com.inductiveautomation.ignition.gateway.project.BaseProjectManager.lambda$fireProjectUpdated$25(BaseProjectManager.java:1005)

at com.inductiveautomation.ignition.gateway.project.BaseProjectManager.lambda$submitToQueue$22(BaseProjectManager.java:983)

at com.inductiveautomation.ignition.common.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:239)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.base/java.lang.Thread.run(Unknown Source)

Caused by: org.python.core.PyException: ImportError: No module named rabbitmq

... 40 common frames omitted

I can't seem to get this working. Could someone please help.

Maybe try this:

1 Like

Thank you for the response Michael. Sorry I'm a bit late to the party but I got this resolved by placing the amqp-client-5.9.0.jar at "~C:\Program Files\Inductive Automation\Ignition\user-lib" and at the "C:\Program Files\Inductive Automation\Ignition\lib" and "C:\Program Files\Inductive Automation\Ignition\lib\core\common" folders. Not sure whether it is required at all the places but hey, it worked. Thanks for your response though.