{"id":26090604,"url":"https://github.com/outerfire/microservice-development","last_synced_at":"2025-07-06T10:07:56.724Z","repository":{"id":281398972,"uuid":"942051021","full_name":"OuterFire/microservice-development","owner":"OuterFire","description":"microservice development","archived":false,"fork":false,"pushed_at":"2025-03-14T15:54:15.000Z","size":514,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-07T13:44:29.233Z","etag":null,"topics":["golang","microservices","redis","robotframework"],"latest_commit_sha":null,"homepage":"","language":"Go","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/OuterFire.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":"2025-03-03T13:49:12.000Z","updated_at":"2025-03-14T15:54:19.000Z","dependencies_parsed_at":"2025-03-08T20:40:39.668Z","dependency_job_id":null,"html_url":"https://github.com/OuterFire/microservice-development","commit_stats":null,"previous_names":["outerfire/microservice-development"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OuterFire/microservice-development","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuterFire%2Fmicroservice-development","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuterFire%2Fmicroservice-development/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuterFire%2Fmicroservice-development/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuterFire%2Fmicroservice-development/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OuterFire","download_url":"https://codeload.github.com/OuterFire/microservice-development/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuterFire%2Fmicroservice-development/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263882285,"owners_count":23524461,"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":["golang","microservices","redis","robotframework"],"created_at":"2025-03-09T09:35:02.763Z","updated_at":"2025-07-06T10:07:56.699Z","avatar_url":"https://github.com/OuterFire.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introduction\n\nThe purpose of this repository is to showcase the end to end lifecycle of microservice development.\n\n**Key points:**\n\n* **Golang** programing language used to develop the microservices. \n* **Robot framework** in addition of **python libraries** to test **functional** and **robustness** test cases.\n* **Kubernetes Cluster: Minikube** utilization to deploy the microservices.\n* **Docker** to build microservice images which then will be used in the helm chart deployment.\n* **Helm** to package the microservices into helm charts that can be easily deployed on the Kubernetes cluster.\n\n# Other Documents\n\nFor more internal documents found in **documents/** folder: \n\n* [Install Guide](documents/InstallGuide.md#installation-guide)\n  * [Build docker images](documents/InstallGuide.md#1-build-docker-images)\n  * [Build helm chart](documents/InstallGuide.md#2-build-the-helm-chart)\n  * [Install helm chart](documents/InstallGuide.md#3-installation)\n* [Interface Guide](documents/InterfaceGuide#interfaces)\n  * [Event Message Interface](documents/InterfaceGuide#1-event-message-em---interface)\n  * [Event Message Interface](documents/InterfaceGuide#2-notification-message-nm---interface)\n* [Sequence](documents/Sequence.md)\n\n* Demo Recording: https://youtube.com/\n\n# Deployment\n\nDeployment view of the microservices running in kubernetes cluster.\n\n\u003cimg src=\"documents/images/deployment.png\" alt=\"drawing\" width=\"602\"/\u003e\n\nPod view of the deployed microservices:\n\n\u003cimg src=\"documents/images/pods.png\" alt=\"drawing\" width=\"527\"/\u003e\n\n\n### event-producer microservice interfaces:\n\n| interface name | full name                           | producer           | consumer       |\n|----------------|-------------------------------------|--------------------|----------------|\n| \u003cEP.EM\u003e        | event-producer.event-message        | application - http | event-producer |\n| \u003cEP.NM\u003e        | event-producer.notification-message | event-producer     | event-consumer |\n\n### event-consumer microservice interfaces:\n\n| interface name | full name                           | producer           | consumer       |\n|----------------|-------------------------------------|--------------------|----------------|\n| \u003cEC.NM\u003e        | event-consumer.notification-message | event-producer     | event-consumer |\n\nThe deployment view consists of **4 microservices**.\n\n- 3 microservices in blue (**event-producer**, **event-consumer**, **event-simulator**) which are developed in this repository.\n- 1 microservice in green (**redis**) a dependency, which is an **external microservice** found in the following artifactory:\n  - https://artifacthub.io/packages/helm/bitnami/redis.\n\n## Description\n\n### Event Producer Microservice\n\nThe **event-producer microservice** consists of 2 interfaces and has a dependency on the redis microservice.\n\n- The Event Message (EM) interface and the Notification Message (NM) interface.\n\n- The event-producer has a client connection to the redis microservice using the following dependency:\n  - github.com/redis/go-redis/v9\n  \n- The usecase of the redis client connection is to create a redis stream called NotificationStream.\n  - Stream created on:\n       1. Start up.\n       2. Pod restart.\n       3. If the client connection has been lost. \n- Another usecase of the redis client is to send events to the redis stream using the Notification Message interface.\nThe event sent to the redis stream is defined by the Notification Message interface and consists of the following data\n`{\"id\": 123, \"description\": \"hello world\", \"timestamp\": \"2025-02-25T22:06:25.478310425Z\"}`. This event is sent to redis\nwhen a http request is sent to the `/event` endpoint defined by the Event Message (EM) interface. \n\n\n### Event Consumer Microservice\n\nThe **event-consumer microservice** implements the Notification Message (NM) interface and has a dependency on the redis microservice.\n\n- The event-consumer has a client connection to the redis microservice using the following dependency:\n  - github.com/redis/go-redis/v9\n\n- The usecase for this redis client connection is to consume an event from the redis stream generated by the event-producer microservice.\nThe event consumed will look like this `{\"id\": 123, \"description\": \"hello world\", \"timestamp\": \"2025-02-25T22:06:25.478310425Z\"}` as defined\nby the Notification Message (NM) interface. When a Notification Message is consumed from the redis stream it is unmarshalled, logged and then acknowledged. \n\n\n### Event Simulator Microservice - (traffic simulator)\n\nThe **event-simulator microservice** is optional, It's used to **simulate user traffic** to the Event Message (EM) interface.\n- You can use curl to send a http requests to the Event Message (EM) interface instead.\n\n### Redis Microservice - (external microservice)\n\nThe **redis microservice** is a dependency service used by **event-producer microservice** and the **event-consumer microservice**.\nThe redis stream feature is utilized.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouterfire%2Fmicroservice-development","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fouterfire%2Fmicroservice-development","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouterfire%2Fmicroservice-development/lists"}