Integrating AWS Amplify with Eclipse Mosquitto for MQTT Messaging

Integrating AWS Amplify with Eclipse Mosquitto for MQTT Messaging

This note describes how to integrate AWS Amplify with Eclipse Mosquitto as an MQTT message broker.

Takahiro Iwasa
2 min read

This note describes how to integrate AWS Amplify with Eclipse Mosquitto as an MQTT message broker.

Setting Up Eclipse Mosquitto

Create a docker/docker-compose.yml file with the following content:

docker/docker-compose.yml
version: '3.4'
services:
mosquitto:
image: eclipse-mosquitto:1.6.9
ports:
- 1883:1883 # MQTT
- 9001:9001 # WebSocket
volumes:
- ./mosquitto:/mosquitto/config

Create a docker/mosquitto/mosquitto.conf file with the following content:

listener 1883
listener 9001
protocol websockets

Start the Mosquitto container:

Terminal window
docker-compose up -d

Building Angular Application

Run the following commands to create a new Angular application and install necessary dependencies:

Terminal window
ng new angular-mosquitto-sample

Update src/polyfills.ts:

src/polyfills.ts
/**
* ...
*/
/***************************************************************************************************
* APPLICATION IMPORTS
*/
// Add the following:
(window as any).global = window;

Edit src/app/app.component.html:

src/app/app.component.html
<h1>Received messages</h1>
<hr/>
<div *ngFor="let message of messages">
{{ message }}
</div>

Edit src/app/app.component.ts:

src/app/app.component.ts
import { Component, OnInit } from '@angular/core';
import { PubSub } from 'aws-amplify';
import { MqttOverWSProvider } from '@aws-amplify/pubsub/lib/Providers';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
messages = [];
ngOnInit() {
PubSub.addPluggable(new MqttOverWSProvider({
aws_pubsub_endpoint: 'ws://localhost:9001/',
// Do not use SSL
aws_appsync_dangerously_connect_to_http_endpoint_for_testing: true,
}));
PubSub.subscribe('test-topic').subscribe(payload => {
console.log(payload);
this.messages.push(payload.value.message);
});
}
}

Testing the Application

Install mqtt with the following command:

Terminal window
npm i --save-dev mqtt

Publish MQTT messages to the local Mosquitto broker:

Terminal window
mqtt pub \
-t 'test-topic' \
-h localhost \
-p 1883 \
-m '{"message": "Hello World"}'

The Angular application should display the received message in real-time.

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.