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