Major bug fixes relating to the Redis implementation in Reprocessing and Search Key Cache were identified and fixed as part of the rekeying development. Included functionality to stop the Exhaustive training. Fixed the Unsupervised learning functionality in Exhaustive Training. Embedded the Mock Data CSV data into a class to make it compatible with Docker without needing to modify the Dockerfile (i.e, build). Included a new table that stores training data to enhance support capabilities for Exhaustive. Reintroduced and validated the Multitenancy functionality. Postgres is now fully deprecated in place of Redis for cache, and all implementations of the Interfaces for Postgres have been removed. No migrations exist to support this deprecation, and Postgres as a cache is now wholly unsupported. Removed the Indexing background thread, as Redis does not require it, given that it is a key-value pair database. Created a RedisCommandFlag Environment Variable to support Fire and Forget write to Redis in Invocation. Implemented functionality to Export, Peek and Download configuration environments using a secure, encrypted scheme. Created a permission to access the functionality via the user interface. Extensive database-based logging is included to provide for a comprehensive audit. Created functionality to Import the encrypted Export file inside a database transaction to ensure consistency. As Docker is now the primary deployment model, log4net instantiation has been moved to an approach that primarily uses programmatic instantiation of the ConsoleLogger and RollingFileAppender given Environment Variables. Implemented functionality to support remote \ mounted Log4Net XML Serialisation files for more advanced log4net configurations. Reintroduced access to counters via the user interface and created a permission. Took the opportunity to implement ReSharper linter suggestions. Disabled the Lock button across the whole application, with that functionality being reserved for future use. It is intended that locking happens programmatically on the basis of dependencies in future commits. Fixed several significant end-use bugs which became apparent during testing of the refactored code relating to case management and visualisations. Fixed certain other minor bugs that came up during testing. Brought documentation up to date for this commit. Brought the Docker Compose file up to date for this commit. Removed Redundant Environment Variables for this commit. Made the README file less verbose and unnecessary.
2.4 KiB
layout, title, nav_order, parent, grand_parent
| layout | title | nav_order | parent | grand_parent |
|---|---|---|---|---|
| default | AMQP Queue Ingestion and Exchange Publishing | 2 | API | Concepts |
🚀Speed up implementation with hands-on, face-to-face training from the developer.
AMQP Queue Ingestion and Exchange Publishing
In addition to the synchronous and asynchronous HTTP model invocation methods, there exists AMQP, which is available for processing the same exact payload specification. The model GUID (EntityAnalysisModelGuid) is passed in a header rather than the URL. There exists no Async switch as AMPQ is asynchronous by its nature.
To enable AMQP integration, the Environment Variable must be configured to firstly allow AMPQ, thereafter specify the fully qualified URL to establish a connection:
AMQP=True
AMQPUri=amqps://<User>:<Password>@cow.rmq2.cloudamqp.com/User
Aside from the AMQP protocols, the messaging payload is identical to the HTTP API.
Jube will establish queues and exchanges upon connection to the AMQP Server or Cluster. The resources required for AMQP integration are as follows:
| Resource | Type | Description |
|---|---|---|
| jubeInbound | Queue | A queue that accepts model request JSON in the body and a header titled EntityAnalysisModelGuid. |
| jubeOutbound | Exchange | A exchange that accepts model response JSON in the body and is published such that queues may be subscribed to it. |
In this example, a Queue has been created that is subscribed to all messages passing through the jubeOutbound Exchange:
To pass a JSON message via AMQP, messages are queued to jubeInbound with JSON in the Body and a header named EntityAnalysisModelGuid which matches the model Guid (the EntityAnalysisModelGuid would otherwise have been part of the URL slug):
Queuing the message will make it available asynchronously to an instance of Jube with AMQP enabled. On receipt of a message from AMQP, it will be processed as if it were received synchronously, albeit sending the response payload to the jubeOutbound exchange, rather than as a response in HTTP context:


