Sending data to remote queues
Scoring.one provides API for sending data to remote systems via queue directly from scenarios. There are pre-defined queues dedicated to sending data to RDBMS (i.e. „sce-postgres-data”)
Example in Groovy:
import com.rabbitmq.client.*
amqpManager.checkConnection()
if (!amqpManager.channelExists(chName)) {
amqpManager.createChannel(chName)
}
amqpManager.publish(chName, JsonOutput.toJson(BEnvelope),[eventGroup: BEnvelope['eventGroup']])
Where arguments of publish method are:
chName – rabbitMQ's channel name (String)
JsonOutput.toJson(BEnvelope) – message content (String)
[eventGroup: BEnvelope['eventGroup']] – message headers (Map<String, Object>); this argument is optional and may be omitted
The full definition of the publish method, including overloaded variants:
void publish(String channelName, String channelMsg)
void publish(String channelName, String channelMsg, Map<String, Object> headers)
void publish(String channelName, String channelMsg, boolean waitForConfirms, Map<String, Object> headers)
Where:
channelName – the name of the RabbitMQ channel created by createChannel(channelName)
channelMsg – the message body
waitForConfirms – whether to wait until all messages published since the last call have been either ack'd or nack'd by the broker
headers – a user-defined map of key-value pairs used to attach custom metadata to the message. These headers can be used by consumers or routing logic to inspect, filter, or process messages based on application-specific information. Each key must be a string, and the values can be of various AMQP-compatible types (e.g., String, Integer, Boolean, byte[])
A message intended for persistence in a relational database should be a JSON object with the structure described as follows:
Message:
type: object
required:
- table
- schema
- data
properties:
table:
type: string
schema:
type: string
data:
type: object
additionalProperties:
oneOf:
- type: string
- type: number
- type: boolean
on_conflict: $ref: '#/components/schemas/OnConflict'
OnConflict:
type: object
required:
- index_column_names
- action
properties:
index_column_names:
type: array
items:
type: string
action:
type: string
enum:
- update
- nothing
Example:
{
"table": "car",
"schema": "public",
"data": {
"registration_number": "TK 49899",
"number_of_doors": 4
},
"on_conflict": {
"index_column_names": [
"registration_number"
],
"action": "update"
}
}
Last updated