Getting started Community Training Tutorials Documentation APIs, AI & Tools
Common use cases for the connector include:
Sending SNS messages to Amazon SQS queues
Sending Amazon SNS messages to HTTP/HTTPS endpoints
Amazon SNS works closely with Amazon Simple Queue Service (Amazon SQS). By using Amazon SNS and Amazon SQS together, messages can be delivered to applications that:
Require immediate notification of an event.
Are persisted in an Amazon SQS queue for other applications to process later.
When you subscribe an Amazon SQS queue to an Amazon SNS topic, you can publish a message to the topic. Amazon SNS then sends an Amazon SQS message to the subscribed queue.
Use AWS Management Console to simplify the process of subscribing an Amazon SQS queue to an Amazon SNS topic.
You can use Amazon SNS to send notification messages to one or more HTTP or HTTPS endpoints. When you subscribe an endpoint to am Amazon SNS topic, you can publish a notification to the topic. Amazon SNS then sends an HTTP POST request that delivers the contents of the notification to the subscribed endpoint.
The following diagram shows an example flow for this use case:
Before you try the example, access Anypoint Studio, and verify that the Mule Palette displays entries for Amazon SNS and Amazon SQS. If not, follow the instructions in Install the Connector in Studio Using Exchange to install both connectors.
To configure a Mule app that uses a connector to send Amazon SNS messages to Amazon SQS queues:
Create a new Mule project in Anypoint Studio.
In the Mule Palette, search for HTTP, and select the Listener operation:
Drag the Listener operation to the canvas.
In the Listener configuration, click + next to the Connector configuration field to add a global element.
Accept the defaults.
In the Listener configuration General tab, set the Display Name field to HTTP and the Path field to`/''.
In the Mule Palette, search for SNS and select the Publish operation:
Drag the Publish operation to the right of the HTTP Listener component.
In the Publish configuration, click + next to the Connector configuration field to add a global element.
Configure the global element as follows:
| Parameter | Description | Value |
|---|---|---|
Name |
Name used to reference the configuration |
|
Access Key |
Alphanumeric text string that uniquely identifies the user who owns the account. |
AWS Access Key |
Secret Key |
Key that plays the role of a password |
AWS secret key |
Region Endpoint |
Queue region. |
The queue region |
The following image shows a sample global element for the Publish operation:
Select the Configuration XML tab to view the corresponding XML:
<sns:config name="Amazon_SNS_Configuration"
doc:name="Amazon SNS configuration" >
<sns:basic-connection
accessKey="EXAMPLEACCESSKEY"
secretKey="EXAMPLESECRETKEY" />
</sns:config>
Select the Global Elements tab.
Select the Amazon SNS configuration (Configuration) and click Edit.
Click Test Connection to confirm that Mule can connect with the SNS instance.
If the connection is successful, click OK to save the configuration.
Otherwise, review or correct any incorrect parameters, and test again.
Go back to the flow and select Publish.
Configure parameters in General Tab:
| Parameter | Value | Description |
|---|---|---|
Display Name |
|
Name of the publish operation. |
Basic Settings section |
||
Connector configuration |
|
The reference name to the global element you created. |
Target Platform section |
||
Topic arn |
|
Amazon Resource Name (ARN) of the topic you want to publish to. |
Target arn |
Amazon Resource Name (ARN) of the platform endpoint you want to publish to. |
|
Phone number |
The phone number of the device you want to publish to. |
|
Message Parameters |
||
Message |
|
Message Body |
The following image shows a sample configuration for the Publish Message operation (General Tab):
Configure parameters in Advanced Tab:
| Parameter | Value | Description |
|---|---|---|
Message Parameters |
||
Subject |
|
Subject line when the message is delivered to email endpoints. |
Message structure |
|
Message structure that will be different for each protocol. |
Message attributes |
Amazon SNS message attributes, as described in the Amazon Simple Notification Service Developer Guide. |
|
FIFO Parameters |
||
Message Group ID |
Token that specifies that a message belongs to a specific message group. Required when publishing to a FIFO topic. |
|
Message Deduplication ID |
Token used for the deduplication of messages when publishing to a FIFO topic. Allows you to overwrite the value generated by Amazon SNS. Required when content-based deduplication is disabled. |
|
The following image shows a sample configuration for the Publish Message operation (Advanced Tab):
Select the Configuration XML tab to view the corresponding XML:
<sns:publish doc:name="Publish" doc:id="276aca8a-334a-4a04-a2ec-8ca4b21743c5"
config-ref="Amazon_SNS_SNS_configuration"
topicArn="arn:aws:sns:us-east-1:123456789012:TopicName"
subject="Testing publish to queue"
messageStructure="JSON">
<sns:message ><![CDATA[#['{"default": "Hello world!"}']]]></sns:message>
</sns:publish>
The default JSON key has a special meaning for SNS. The key’s value is sent as a message to every subscriber, regardless of the protocol used. You must specify this key for the Publish Message operation. You can optionally specify other top-level keys that define the message to send to a specific transport protocol, such as HTTP or SQS. For more information, see Publish in the Amazon Simple Notification Service documentation.
Using the same example, add a Logger component to display the data processed by the Publish operation on the Mule console.
In the Mule Palette, search for the Logger component and drag it to the right of the Amazon SNS Connector (Publish).
Configure the Logger component as follows:
| Parameter | Value |
|---|---|
Display Name |
|
Message |
|
Level |
|
Using the same example, add a second flow that enables Amazon SQS to receive messages published by Amazon SNS:
In the Mule Palette, search for Flow and drag the Flow component to the canvas.
In the Mule Palette, search for SQS, select the Receive messages operation, and drag it to the left of the Flow component.
Select the new component.
Click + next to the Connector configuration field to add a new Amazon SQS Connector global element.
Configure the global element as follows:
| Parameter | Description | Value |
|---|---|---|
Name |
A name by which to refer to the configuration |
|
Access Key |
Alphanumeric text string that uniquely identifies the user who owns the account |
AWS access key |
Secret Key |
Key that plays the role of a password. |
AWS secret key |
Region Endpoint |
Queue region. |
The queue region |
Test Queue ARN |
Queue ARN which will be used in the next step to test the connection |
Test queue ARN in the following format - |
The following image shows a sample global element for the Receive messages operation:
Select the Configuration XML tab to view the corresponding XML:
<sqs:config name="Amazon_SQS_Configuration"
doc:name="Amazon SQS Configuration" >
<sqs:basic-connection
region="us_east_1"
accessKey="EXAMPLEACCESSKEY"
secretKey="EXAMPLESECRETKEY"
testQueueArn="arn:aws:sqs:us-east-1:123456789012:QueueName"/>
</sqs:config>
Click Test Connection to confirm that Mule can connect with the SQS instance:
If the connection is successful, click OK to save it.
If the connection is not successful, review or correct any incorrect parameters, and then test again.
In the properties editor of Amazon SQS Connector, configure the remaining parameters:
| Parameter | Value |
|---|---|
Basic Settings section |
|
Display Name |
|
Connector configuration* |
|
Queue url |
Queue URL in the following format - |
Other fields in the General group |
Default values |
Verify that the SQS queue in the configuration is subscribed to the SNS topic.
For example:
Select the Configuration XML tab to view the corresponding XML:
<sqs:receivemessages
doc:name="Amazon SQS (Streaming)"
queueUrl="https://sqs.us-east-1.amazonaws.com/123456789012/queue-url"
config-ref="Amazon_SQS_Configuration"/>
Add a Logger scope after Amazon SQS Connector to print the data passed by the Receive operation in the Mule console. Configure the Logger as follows:
| Parameter | Value |
|---|---|
Display Name |
|
Message |
|
Level |
|
Save the project.
To run the project as a Mule app:
Right-click the project in Package Explorer and select Run As > Mule Application.
Open a web browser, enter the URL http://localhost:8081/, and check the response.
The logger shows the published message ID on the browser and the received message on the Mule console.
Paste this code into your XML editor to quickly load the flow for this example use case into your Mule application. If needed, change the values to reflect your environment.
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:sqs="http://www.mulesoft.org/schema/mule/sqs"
xmlns:sns="http://www.mulesoft.org/schema/mule/sns"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/sns http://www.mulesoft.org/schema/mule/sns/current/mule-sns.xsd
http://www.mulesoft.org/schema/mule/sqs http://www.mulesoft.org/schema/mule/sqs/current/mule-sqs.xsd">
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config">
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<sns:config name="Amazon_SNS_configuration" doc:name="Amazon SNS configuration">
<sns:basic-connection accessKey="EXAMPLEACCESSKEY" secretKey="EXAMPLESECRETKEY" />
</sns:config>
<sqs:config name="Amazon_SQS_Configuration" doc:name="Amazon SQS Configuration">
<sqs:basic-connection accessKey="EXAMPLEACCESSKEY" secretKey="EXAMPLESECRETKEY"
testQueueArn="arn:aws:sqs:us-east-1:123456789012:QueueName"/>
</sqs:config>
<flow name="sns-connector-exampleFlow">
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/"/>
<sns:publish doc:name="Publish" config-ref="Amazon_SNS_configuration"
topicArn="arn:aws:sns:us-east-1:123456789012:TopicName"
subject="Testing publish to queue"
messageStructure="JSON">
<sns:message><![CDATA[#['{
"default": "Hello World!"
}']]]></sns:message>
</sns:publish>
<logger level="INFO" doc:name="Logger" message="Message: #[payload]"/>
</flow>
<flow name="sns-connector-exampleFlow1">
<sqs:receivemessages doc:name="Amazon SQS (Streaming)" config-ref="Amazon_SQS_Configuration"
queueUrl="https://sqs.us-east-1.amazonaws.com/123456789012/queue-url"/>
<logger level="INFO" doc:name="Logger" message="Received Message: #[payload]"/>
</flow>
</mule>