{"id":19657835,"url":"https://github.com/gdatasoftwareag/motornet","last_synced_at":"2025-04-08T03:18:16.982Z","repository":{"id":36960672,"uuid":"299307071","full_name":"GDATASoftwareAG/motornet","owner":"GDATASoftwareAG","description":"Motor.NET is a microservice framework based on Microsoft.Extensions.Hosting","archived":false,"fork":false,"pushed_at":"2024-09-23T04:46:12.000Z","size":1139,"stargazers_count":35,"open_issues_count":29,"forks_count":9,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-09-23T09:10:47.221Z","etag":null,"topics":["aspnetcore","dotnet","kafka","metrics","microservice","opentelemetry","opentracing","rabbitmq","tracing"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GDATASoftwareAG.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2020-09-28T12:49:35.000Z","updated_at":"2024-09-18T11:28:47.000Z","dependencies_parsed_at":"2024-03-25T11:41:38.333Z","dependency_job_id":"b582e1bc-9e96-454c-ab34-cb038041234c","html_url":"https://github.com/GDATASoftwareAG/motornet","commit_stats":{"total_commits":353,"total_committers":19,"mean_commits":18.57894736842105,"dds":0.5722379603399433,"last_synced_commit":"cb60e40dd3cda39b9e546d640c407651e50cd3ee"},"previous_names":[],"tags_count":61,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GDATASoftwareAG%2Fmotornet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GDATASoftwareAG%2Fmotornet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GDATASoftwareAG%2Fmotornet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GDATASoftwareAG%2Fmotornet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GDATASoftwareAG","download_url":"https://codeload.github.com/GDATASoftwareAG/motornet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247767237,"owners_count":20992548,"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":["aspnetcore","dotnet","kafka","metrics","microservice","opentelemetry","opentracing","rabbitmq","tracing"],"created_at":"2024-11-11T15:33:50.532Z","updated_at":"2025-04-08T03:18:16.962Z","avatar_url":"https://github.com/GDATASoftwareAG.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Motor.NET Logo](./rsc/Icon_Motor_NET_128_Typo.png \"Motor.NET - Drives your microservices\")\n\n[![GitHub](https://img.shields.io/github/license/GDATASoftwareAG/motornet)](https://raw.githubusercontent.com/GDATASoftwareAG/motornet/master/LICENSE)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/GDATASoftwareAG/motornet/dotnet.yml?branch=master)](https://github.com/GDATASoftwareAG/motornet/actions)\n[![Nuget](https://img.shields.io/nuget/v/Motor.Extensions.Hosting)](https://www.nuget.org/packages/Motor.Extensions.Hosting/)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/f74a6fde2c2d490bb60f42590d554e1c)](https://www.codacy.com/gh/GDATASoftwareAG/motornet/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=GDATASoftwareAG/motornet\u0026amp;utm_campaign=Badge_Grade)\n\n## About Motor.NET\n\nMotor.NET is a micro-service framework for .NET built on top of [Microsoft Generic Hosting](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-3.1).\nIt provides easy integration of RabbitMQ, Kafka (WIP) and HTTP as well as helpers for logging and tracing.\n\nYou should be up and running with just a few lines of code.\n\n## Examples\n\nYou find working examples for different use-cases under the [examples](./examples) folder.\n\n- [Consume and publish to RabbitMQ](./examples/ConsumeAndPublishWithRabbitMQ)\n- [Consume from RabbitMQ with Dead Letter Exchange](./examples/ConsumeWithRabbitMQAndDeadLetterExchange)\n- [Consume and publish to Kafka](./examples/ConsumeAndPublishWithKafka)\n- [Consume and publish multiple messages at once to RabbitMQ](./examples/ConsumeAndMultiOutputPublisherWithRabbitMQ)\n- [Create a service with metrics](./examples/MetricsExample)\n- [Create a service with custom traces](./examples/OpenTelemetryExample)\n\n## Support Matrix\n\n| Component | Consume                | Publish              | CloudEvents (Protocol) | CloudEvents (JSON) | Metrics            | Compression        | Custom                          |\n|-----------|------------------------|----------------------|------------------------|--------------------|--------------------|--------------------|---------------------------------|\n| RabbitMQ  | :heavy_check_mark:     | :heavy_check_mark:   | :heavy_check_mark:     | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | priority, dynamic routing       |\n| Kafka     | :heavy_check_mark:     | :heavy_check_mark:   | :heavy_check_mark:     | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | partitioning key, dynamic topic |\n| Timer     | ( :heavy_check_mark: ) | -                    | :x:                    | :x:                | :x:                | :x:                |                                 |\n| SQS       | ( :heavy_check_mark: ) | -                    | :x:                    | :x:                | :x:                | :x:                |                                 |\n| NATS      | ( :heavy_check_mark: ) | :heavy_check_mark:   | :x:                    | :heavy_check_mark: | :x:                | :x:                |                                 |\n\n**CloudEvents (Protocol)**: If supported, the protocol format uses headers from Kafka or RabbitMQ to store CloudEvent metadata.\n\n**CloudEvents (JSON)**: If supported, CloudEvent published in the enveloped variant, see https://github.com/cloudevents/spec/blob/v1.0.1/json-format.md#3-envelope. \n\n## Health Checks\n\nMotor.NET comes by default already with two health checks for message processing services (RabbitMQ, Kafka, Timer, and SQS):\n\n- `MessageProcessingHealthCheck`: Fails when no messages were consumed in a certain time frame from the Motor.NET internal queue although it has at least some messages.\n- `TooManyTemporaryFailuresHealthCheck`: Fails when too many messages led to a failure since the last message was correctly handled (either successful or as invalid input).\n\n## Compression (Optional)\n\n[Gzip][gzip] compression can optionally be enabled for consumers and publishers. By enabling it for a publisher, the payload of\nall published messages will be compressed. Enabling it for a consumer will allow the consumer to decompress these\nmessages. Consumers can however still consume uncompressed messages. This should make it easy to enable compression in\nan existing environment that does not use compression yet. It just needs to be enabled first for the consumers and\nafterwards for the publishers.\n\n## Thread Starvation Handling\n\nSince .NET 6, `Environment.ProcessorCount` can be overwritten using env `DOTNET_PROCESSOR_COUNT`, see [issue](https://github.com/dotnet/runtime/issues/48094) and [blog](https://devblogs.microsoft.com/dotnet/announcing-net-6/#optimizing-scaling). This can be particularly helpful within container runtimes with cpu resources being limited by cgroups.\n\n## License\n\nMotor.NET is provided under the [MIT](./LICENSE) license.\n\n[gzip]: https://www.gnu.org/software/gzip/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdatasoftwareag%2Fmotornet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgdatasoftwareag%2Fmotornet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdatasoftwareag%2Fmotornet/lists"}