A simple demo showing how to use Localstack SQS version to consume messages in Go

Frederic G. MARAND 0e28501a85 Typos: use %w for errors in fmt.Errorf. 1 vuosi sitten
.gitignore d320ed7b36 Initial version: list queues and receive message from the first one. 1 vuosi sitten
LICENSE.txt d320ed7b36 Initial version: list queues and receive message from the first one. 1 vuosi sitten
Makefile ad23ea157e Implement a working consumer with SQS-independent handlers. 1 vuosi sitten
README.md ad23ea157e Implement a working consumer with SQS-independent handlers. 1 vuosi sitten
aws.go d320ed7b36 Initial version: list queues and receive message from the first one. 1 vuosi sitten
consumer.go 0e28501a85 Typos: use %w for errors in fmt.Errorf. 1 vuosi sitten
demo.go ad23ea157e Implement a working consumer with SQS-independent handlers. 1 vuosi sitten
docker-compose.yml d320ed7b36 Initial version: list queues and receive message from the first one. 1 vuosi sitten
go.mod ad23ea157e Implement a working consumer with SQS-independent handlers. 1 vuosi sitten
go.sum ad23ea157e Implement a working consumer with SQS-independent handlers. 1 vuosi sitten
handler.go ad23ea157e Implement a working consumer with SQS-independent handlers. 1 vuosi sitten
producer.go ad23ea157e Implement a working consumer with SQS-independent handlers. 1 vuosi sitten

README.md

SQS Demo with Localstack

Configuring the environment

  • install Docker
  • install Localstack.
    • On macOS: brew install localstack
  • install AWS CLI: see AWS doc
  • validate Docker configuration
    • localstack config validate

Running the demo

  • on one terminal tab:

    • start a local SQS instance
    • docker compose up
    • or docker-compose up on older Docker versions
    • you should be getting something like this:

      Attaching to localstack_main
      localstack_main  | Waiting for all LocalStack services to be ready
      localstack_main  | 2023-01-04 06:36:28,138 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
      localstack_main  | 2023-01-04 06:36:28,139 INFO supervisord started with pid 16
      localstack_main  | 2023-01-04 06:36:29,144 INFO spawned: 'infra' with pid 21
      localstack_main  |
      localstack_main  | LocalStack version: 1.3.2.dev
      localstack_main  | LocalStack Docker container id: 7ceddc18cd46
      localstack_main  | LocalStack build date: 2023-01-04
      localstack_main  | LocalStack build git hash: 8e5b4b09
      localstack_main  |
      localstack_main  | 2023-01-04 06:36:30,256 INFO success: infra entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
      localstack_main  | Ready.
      localstack_main  | 2023-01-04T06:36:30.138  WARN --- [-functhread5] hypercorn.error            : ASGI Framework Lifespan error, continuing without Lifespan support
      localstack_main  | 2023-01-04T06:36:30.138  WARN --- [-functhread5] hypercorn.error            : ASGI Framework Lifespan error, continuing without Lifespan support
      localstack_main  | 2023-01-04T06:36:30.140  INFO --- [-functhread5] hypercorn.error            : Running on https://0.0.0.0:4566 (CTRL + C to quit)
      localstack_main  | 2023-01-04T06:36:30.140  INFO --- [-functhread5] hypercorn.error            : Running on https://0.0.0.0:4566 (CTRL + C to quit)
      
  • on another terminal tab

    • create a queue: make create-queue
    • send messages: make send, which can be used repeatedly
    • list queues from Go and receive messages: go run .

Modifying the consumer

The actual consumer callback logic is in the SQS-unaware function HandleDummy in handler.go.

Feel free to modify it for other data types.

Cleaning up

After use, remove the SQS data space: make clean