Create AMQP HTTPRequest calling POST /api/exchanges/{username}/{exchangeName}/publish
WebCustomSettings are custom settings in Salesforce the values are the following: AMQP_Url__c: https://jellyfish.rmq.cloudamqp.com AMQP_Credentials__c: xxxxxx:xxxxxxxxxxxxxxxxxxxxxxxx (username:password)
public void callAmqpEndpoint(String exchangeName, String method, String aPayload) {
HttpRequest req = new HttpRequest();
try {
if (exchangeName != null) {
req.setTimeout(120000);
req.setMethod(method);
setAmqpAuthHeader(req);
System.debug(String.valueOf(aPayload));
req.setEndpoint(WebCustomSettings.AMQP_Url__c + '/api/exchanges/' + WebCustomSettings.AMQP_Credentials__c.split(':')[0] + '/' + exchangeName + '/publish');
if (aPayload!=null)
req.setBody(aPayload);
System.debug('Sending api request to endpoint' + req.getEndpoint());
Http http = new Http();
http.send(req);
} else {
throw new Rest_Exception(ResponseCodes_Mgr.getCode('AMQP_REQUEST_FAILED'));
}
} catch (Exception ex) {
System.debug('Error sending amqp request ' + ex);
List<String> theArgs = new List<String>();
theArgs.add('AMQP');
theArgs.add(req.getEndpoint());
throw new Rest_Exception(ResponseCodes_Mgr.getCode('AMQP_REQUEST_FAILED', ex, theArgs));
}
}
Setup AMQP headers
private void setAmqpAuthHeader(HttpRequest aReq) {
Blob headerValue = Blob.valueOf(WebCustomSettings.AMQP_Credentials__c);
String authorizationHeader = 'Basic ' + EncodingUtil.base64Encode(headerValue);
aReq.setHeader('Authorization', authorizationHeader);
aReq.setHeader('Content-Type', 'application/json');
aReq.setHeader('X-AMQP-Tracer', requestJson!=null && requestJson.getTraceId()!=null ? requestJson.getTraceId() : '');
}
Serialize AMQP Request JSON
private String serializeAmqpRequests(String payload) {
JSONGenerator generator = JSON.createGenerator(false);
generator.writeStartObject();
generator.writeStringField('routing_key','amqp-events');
generator.writeFieldName('properties');
generator.writeStartObject();
generator.writeEndObject();
generator.writeStringField('payload', payload);
generator.writeStringField('payload_encoding', 'string');
generator.writeEndObject();
return generator.getAsString();
}
Callout RabbitMQ
public void sendAmqpRequest(String payload){
String amqpPayload = serializeAmqpRequests(payload);
callAmqpEndpoint('event-exchange', 'POST', amqpPayload);
}
what is WebCustomSettings ?
what is WebCustomSettings?
i am getting error aroung websetting url and credential
Websettings:
URL: https://jellyfish.rmq.cloudamqp.com
Credentials: xxxxxx:xxxxxxxxxxxxxxxxxxxxxxxx