{"id":26548723,"url":"https://github.com/martinstanek/edgemq","last_synced_at":"2025-03-22T06:33:25.662Z","repository":{"id":273271544,"uuid":"903316924","full_name":"martinstanek/edgemq","owner":"martinstanek","description":"The simple \u0026 fast persistent queue targetting low resource systems","archived":false,"fork":false,"pushed_at":"2025-02-12T19:34:29.000Z","size":1183,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-12T13:37:43.857Z","etag":null,"topics":["edge","edge-computing","message","queueing"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martinstanek.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-14T09:39:41.000Z","updated_at":"2025-02-12T19:34:33.000Z","dependencies_parsed_at":"2025-01-19T22:37:49.688Z","dependency_job_id":"3e87b88e-9317-4017-92cf-054e6887f112","html_url":"https://github.com/martinstanek/edgemq","commit_stats":null,"previous_names":["martinstanek/edgemq"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinstanek%2Fedgemq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinstanek%2Fedgemq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinstanek%2Fedgemq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinstanek%2Fedgemq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martinstanek","download_url":"https://codeload.github.com/martinstanek/edgemq/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244918585,"owners_count":20531683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["edge","edge-computing","message","queueing"],"created_at":"2025-03-22T06:32:53.033Z","updated_at":"2025-03-22T06:33:25.650Z","avatar_url":"https://github.com/martinstanek.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"## The EdgeMq\n\n *... a simple (like seriously and naively simple), lightweight queue designed to have a minimal memory footprint*\n\nMulti producer, single consumer \u0026 plenty of space for improvements.\n\n![logo](https://github.com/martinstanek/edgemq/blob/main/misc/logo.svg?raw=true)\n\n[![Build status](https://awitec.visualstudio.com/Awitec/_apis/build/status/awitec.edgemq)](https://awitec.visualstudio.com/Awitec/_build/latest?definitionId=52)\n[![NuGet](https://img.shields.io/nuget/v/Awitec.EdgeMq.Client.svg)](https://www.nuget.org/packages/Awitec.EdgeMq.Client)\n[![NuGet](https://img.shields.io/nuget/v/Awitec.EdgeMq.TestContainer.svg)](https://www.nuget.org/packages/Awitec.EdgeMq.TestContainer)\n![Docker Image Version](https://img.shields.io/docker/v/awitec/edgemq)\n\n![logo](https://github.com/martinstanek/edgemq/blob/main/misc/ui.png?raw=true)\n\n### Producer\n\n```csharp\nvar httpClient = new HttpClient { BaseAddress = new Uri(\"http://localhost:2323\") };\nvar config = new EdgeMqClientConfiguration { ApiKey = \"123\" };\nvar edgeMqClient = new EdgeMqClient(httpClient, config);\n\nawait edgeMqClient.EnqueueAsync(\"test-queue\", \"hello world!\");\n```\n\n### Consumer\n\n```csharp\nvar httpClient = new HttpClient { BaseAddress = new Uri(\"http://localhost:2323\") };\nvar config = new EdgeMqClientConfiguration { ApiKey = \"123\" };\nvar edgeMqClient = new EdgeMqClient(httpClient, config);\n\nawait edgeMqClient.DequeueAsync(\"test-queue\", batch, timeOut: TimeSpan.FromSeconds(1), messages =\u003e\n{\n    foreach (var message in messages)\n    {\n        Console.WriteLine(message.Payload);\n    }\n\n    return Task.CompletedTask;\n\n}, CancellationToken.None);\n```\n\n### Server\n\n```\nUI -\u003e http://localhost:2323/\nOpenApi -\u003e http://localhost:2323/openapi/v1.json\nScalar -\u003e http://localhost:2323/scalar/\nAPI -\u003e http://localhost:2323/v1/queues\n```\n### Docker\n\nAvailable Docker Tags: https://hub.docker.com/repository/docker/awitec/edgemq/tags\n\n### Compose\n\n```yml\nservices:\n\n  edgemq:\n    hostname: edgemq\n    container_name: edgemq\n    image: \"awitec/edgemq:latest-arm64\"\n    ports:\n      - 2323:2323\n    environment:\n      - EDGEMQ_APIKEY=123\n      - EDGEMQ_PATH=/data/queues\n      - EDGEMQ_QUEUES=queue1, queue2\n      - EDGEMQ_STOREMODE=FileSystem\n      - EDGEMQ_CONSTRAINTSMODE=Ignore\n      - EDGEMQ_MAXCOUNT=100000\n      - EDGEMQ_MAXSIZEBYTES=10485760\n      - EDGEMQ_MAXBUFFERCOUNT=1000\n      - EDGEMQ_MAXBUFFERSIZEBYTES=1048576\n      - EDGEMQ_PAYLOADSIZEBYTES=1024\n      - EDGEMQ_BATCHSIZE=100\n    volumes:\n      - edgemqdata:/data\n      - /etc/localtime:/etc/localtime:ro\n    restart: unless-stopped\n\nvolumes:\n  edgemqdata:\n```\n\nWhen no env. vars provided, the server will default to InMemory mode without any API key.\n\n### Testing\n\nThe test container NuGet can be used for the derived integration tests, (the default architecture is arm64) ie.:\n\n```csharp\n[Fact]\npublic async Task GetClient_ContainerIsCreated_ClientReturned()\n{\n    await using var testContainer = new EdgeQueueTestContainer();\n\n    if (!await testContainer.IsTestable())\n    {\n        return;\n    }\n\n    var client = await testContainer.GetClientAsync(\n            testContainerName: \"my-test-container\", \n            testQueueName: \"my-test-queue\", \n            EdgeQueueTestContainer.ImageArchitecture.Amd64);\n     \n    var queues = await client.GetQueuesAsync();\n\n    queues.Queues.ShouldNotBeEmpty();\n}\n```\n\n\nHappy Queueing,\\\nMartin","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinstanek%2Fedgemq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartinstanek%2Fedgemq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinstanek%2Fedgemq/lists"}