Skip to content

asecurityteam/runsqs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

runsqs - Prepackaged Runtime Helper For AWS SQS

GoDoc

Bugs Code Smells Coverage Duplicated Lines (%) Lines of Code Maintainability Rating Quality Gate Status Reliability Rating Security Rating Technical Debt Vulnerabilities

Overview

This project is a tool bundle for running a service that interacts with AWS SQS written in go. It comes with an opinionated choice of logger, metrics client, and configuration parsing. The benefits are a simple abstraction around the aws-sdk api for consuming from an SQS or producing to an SQS.

Quick Start

package main

import (
	"context"
	"fmt"
	"time"

	"github.com/asecurityteam/runsqs/v4"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sqs"
	"github.com/aws/aws-sdk-go-v2/service/sqs/types"
)

type BasicConsumer struct{}

func (m BasicConsumer) ConsumeMessage(ctx context.Context, message *types.Message) runsqs.SQSMessageConsumerError {
	fmt.Println(string(*message.Body))
	return nil
}

func (m BasicConsumer) DeadLetter(ctx context.Context, message *types.Message) {
	fmt.Println("deadletter")
}

func main() {
	// create a new SQS config, and establish a SQS instance to connect to.
	// aws new sessions by default reads AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY as environment variables to use
	ctx := context.Background()

	consumerComponent := runsqs.DefaultSQSQueueConsumerComponent{}
	consumerConfig := consumerComponent.Settings()
	consumerConfig.QueueURL = "www.aws.com/url/to/queue"
	consumerConfig.AWSEndpoint = "www.aws.com"
	consumerConfig.QueueRegion = "us-east-1"
	consumerConfig.PollInterval = 1 * time.Second

	consumer, err := consumerComponent.New(ctx, consumerConfig)
	if err != nil {
		panic(err.Error())
	}

	consumer.MessageConsumer = BasicConsumer{}

	producerComponent := runsqs.DefaultSQSProducerComponent{}
	producerConfig := producerComponent.Settings()
	producerConfig.QueueURL = "www.aws.com/url/to/queue"
	producerConfig.AWSEndpoint = "www.aws.com"
	producerConfig.QueueRegion = "us-east-1"

	producer, err := producerComponent.New(ctx, producerConfig)
	if err != nil {
		panic(err.Error())
	}

	go producer.ProduceMessage(ctx, &sqs.SendMessageInput{
		MessageBody: aws.String("incoming sqs message"),
		QueueUrl:    aws.String(producer.QueueURL()),
	})

	// Run the SQS consumer.
	if err := consumer.StartConsuming(ctx); err != nil {
		panic(err.Error())
	}

	// expected output:
	// "incoming sqs message"
}

Status

This project is in incubation which the interfaces and implementations are subject to change.

Contributing

Building And Testing

We publish a docker image called SDCLI that bundles all of our build dependencies. It is used by the included Makefile to help make building and testing a bit easier. The following actions are available through the Makefile:

  • make dep

    Install the project dependencies into a vendor directory

  • make lint

    Run our static analysis suite

  • make test

    Run unit tests and generate a coverage artifact

  • make integration

    Run integration tests and generate a coverage artifact

  • make coverage

    Report the combined coverage for unit and integration tests

License

This project is licensed under Apache 2.0. See LICENSE.txt for details.

Contributing Agreement

Atlassian requires signing a contributor's agreement before we can accept a patch. If you are an individual you can fill out the individual CLA. If you are contributing on behalf of your company then please fill out the corporate CLA.

About

Library for running SQS producers and consumers

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

 
 
 

Contributors