Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

LearningByExample/reactive-ms-example

Repository files navigation

Reactive Micro Services Example

License: MIT Build Status codecov codebeat badge

info

This is an example of doing reactive MicroServices using spring 5 functional web framework and spring boot 2.

There is a Kotlin fork of this service.

This service provide and API that will get the geo location and the sunrise and sunset times from an address.

Scenario: Get Location
 Given I've an address
 When I call the location service
 Then I should get a geo location
 And I should get the sunrise and sunset times

To implement this example we consume a couple of REST APIs.

This example cover several topics:

  • Functional programing.
  • Reactive types.
  • Router Functions.
  • Static Web-Content.
  • Creation on Reactive Java Services/Components.
  • Error handling in routes and services.
  • Reactive Web Client to consume external REST Services.
  • Organizing your project in manageable packaging.

Includes and in depth look to testing using JUnit5:

  • Unit, Integration and System tests.
  • Mocking, including reactive functions and JSON responses.
  • BDD style assertions.
  • Test tags with maven profiles.

usage

To run this service:

$ mvnw spring-boot:run

Sample requests

Get from address

$ curl -X GET "http://localhost:8080/api/location/Trafalgar%20Square%2C%20London%2C%20England" -H "accept: application/json"

Post from JSON

$ curl -X POST "http://localhost:8080/api/location" -H "accept: application/json" -H "content-type: application/json" -d "{ \"address\": \"Trafalgar Square, London, England\"}"

Both will produce something like:

{
 "geographicCoordinates": {
 "latitude": 51.508039,
 "longitude": -0.128069
 },
 "sunriseSunset": {
 "sunrise": "2017年05月21日T03:59:08+00:00",
 "sunset": "2017年05月21日T19:55:11+00:00"
 }
}

All date and times are ISO 8601 UTC without summer time adjustment

API

View in the embedded Swagger UI View in the embedded Swagger UI

Run in Postman Run in Postman

Project Structure

References

AltStyle によって変換されたページ (->オリジナル) /