{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"6f96590a-68d3-4889-826f-fa6d70cace57","name":"Spring-Job-App-microservice","description":"# Job Microservice Project\n\n## Overview\n\nThis project is a microservice architecture that includes a Job microservice, Company microservice, and Review microservice. These services communicate with each other using a variety of technologies, including Docker, OpenFeign, Eureka Client, Config Server, PostgreSQL, RabbitMQ, and Zipkin. The microservices are accessible through an API Gateway.\n\n## Technologies Used\n\n- **Docker**: For containerization of services.\n    \n- **Docker Compose**: To orchestrate the multi-container Docker applications.\n    \n- **Spring Boot**: Framework for creating standalone Java applications.\n    \n- **OpenFeign**: For inter-service communication.\n    \n- **Eureka Client**: For service discovery.\n    \n- **Config Server**: To manage external properties for applications across all environments.\n    \n- **PostgreSQL**: Relational database for data storage.\n    \n- **RabbitMQ**: Message broker for asynchronous communication.\n    \n- **Zipkin**: Distributed tracing system to gather timing data.\n    \n\n## Architecture\n\n- **Job Service**: Manages job-related operations.\n    \n- **Company Service**: Manages company-related operations and communicates with the Job service.\n    \n- **Review Service**: Manages reviews and communicates with both Job and Company services.\n    \n- **API Gateway**: Central entry point for accessing the microservices.\n    \n- **Config Server**: Centralized configuration management.\n    \n- **Eureka Server**: Service registry for service discovery.\n    \n- **RabbitMQ**: For message brokering between services.\n    \n- **Zipkin**: For tracing and monitoring microservices.\n    \n\n## Setup\n\n### Prerequisites\n\n- Docker\n    \n- Docker Compose\n    \n- Java 11+\n    \n- Maven\n    \n\n### Running the Services\n\n1. git clone https://github.com/Alex1-ai/microserver-job-app-spring\n    \n2. cd microserver-job-app-spring\n    \n3. mvn clean install\n    \n4. docker-compose up --build\n    \n\n### Accessing the Services\n\n- **API Gateway**: `http://localhost:8084`\n    \n    - **Job Service**: `http://localhost:8084/jobs`\n        \n    - **Company Service**: `http://localhost:8084/companies`\n        \n    - **Review Service**: `http://localhost:8084/reviews`\n        \n\n### Configuration\n\nConfiguration properties are managed by the Config Server. Update the configuration in the `application.yml` files located in the `config-repo` directory.\n\n### Example `docker-compose.yml`\n\n``` yaml\nversion: '3.8'\nservices:\n  postgres:\n    image: postgres\n    environment:\n      POSTGRES_USER: alexis\n      POSTGRES_PASSWORD: alexis\n      PGDATA: /data/postgres\n    volumes:\n      - postgres:/data/postgres\n    ports:\n      - \"5432:5432\"\n    networks:\n      - microservice-network\n  pgadmin:\n    image: dpage/pgadmin4\n    environment:\n      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org\n      PGADMIN_DEFAULT_PASSWORD: admin\n    volumes:\n      - pgadmin:/var/lib/pgadmin\n    ports:\n      - \"5050:80\"\n    networks:\n      - microservice-network\n  config-server:\n    image: chidi123/config-server-ms:latest\n    ports:\n      - 8888:8888\n    networks:\n      - microservice-network\n  eureka-server:\n    image: chidi123/servicereg:latest\n    ports:\n      - 8761:8761\n    networks:\n      - microservice-network\n    depends_on:\n      - config-server\n  job-service:\n    image: chidi123/jobms:latest\n    ports:\n      - 8082:8082\n    networks:\n      - microservice-network\n    depends_on:\n      - eureka-server\n      - config-server\n      - postgres\n    environment:\n      SPRING_PROFILES_ACTIVE: docker\n  company-service:\n    image: chidi123/companyms:latest\n    ports:\n      - 8081:8081\n    networks:\n      - microservice-network\n    depends_on:\n      - eureka-server\n      - config-server\n      - postgres\n    environment:\n      SPRING_PROFILES_ACTIVE: docker\n  review-service:\n    image: chidi123/reviewms:latest\n    ports:\n      - 8083:8083\n    networks:\n      - microservice-network\n    depends_on:\n      - eureka-server\n      - config-server\n      - postgres\n    environment:\n      SPRING_PROFILES_ACTIVE: docker\n  rabbitmq:\n    image: rabbitmq:3-management\n    ports:\n      - 5672:5672\n      - 15672:15672\n    networks:\n      - microservice-network\n  zipkin:\n    image: openzipkin/zipkin\n    ports:\n      - 9412:9411\n    networks:\n      - microservice-network\n  gateway:\n    image: chidi123/gateway-ms:latest\n    ports:\n      - 8084:8084\n    networks:\n      - microservice-network\n    depends_on:\n      - eureka-server\n      - config-server\nnetworks:\n  microservice-network:\nvolumes:\n  postgres:\n  pgadmin:\n\n ```\n\n## Notes\n\n- Ensure that the Config Server is running before starting other services.\n    \n- Check the logs for any errors and ensure that all services are registered with Eureka.\n    \n- Use RabbitMQ for message-driven communication between services.\n    \n- Zipkin provides tracing capabilities to monitor the interaction between microservices.\n    \n\n## Troubleshooting\n\n- If you encounter any issues, check the logs of the individual services using Docker logs.\n    \n- Ensure that the database services are up and running, and accessible from the microservices.\n    \n- Verify the configuration in the `application.yml` files for correct database connection properties.\n    \n\n## Contributing\n\nFeel free to contribute to this project by opening issues and submitting pull requests.\n\n## License\n\nThis project is licensed under the MIT License.\n\n---","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"19877044","collectionId":"6f96590a-68d3-4889-826f-fa6d70cace57","publishedId":"2sA3rzKt5c","public":true,"publicUrl":"https://documenter-api.postman.tech/view/19877044/2sA3rzKt5c","privateUrl":"https://go.postman.co/documentation/19877044-6f96590a-68d3-4889-826f-fa6d70cace57","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"dark","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.0","publishDate":"2024-08-07T14:10:10.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2sA3rzKt5c"}