diff --git a/03.microservices/currency-exchange-service/.DS_Store b/03.microservices/currency-exchange-service/.DS_Store
new file mode 100644
index 00000000..5008ddfc
Binary files /dev/null and b/03.microservices/currency-exchange-service/.DS_Store differ
diff --git a/03.microservices/currency-exchange-service/pom.xml b/03.microservices/currency-exchange-service/pom.xml
new file mode 100644
index 00000000..4427f086
--- /dev/null
+++ b/03.microservices/currency-exchange-service/pom.xml
@@ -0,0 +1,123 @@
+
+
+ 4.0.0
+
+ com.in28minutes.microservices
+ currency-exchange-service
+ 0.0.1-SNAPSHOT
+ jar
+
+ currency-exchange-service
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.0.M3
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ Finchley.M2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-config
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
diff --git a/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeController.java b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeController.java
new file mode 100644
index 00000000..51554b61
--- /dev/null
+++ b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeController.java
@@ -0,0 +1,32 @@
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import java.math.BigDecimal;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class CurrencyExchangeController {
+
+ @Autowired
+ private Environment environment;
+
+ @Autowired
+ private ExchangeValueRepository repository;
+
+ @GetMapping("/currency-exchange/from/{from}/to/{to}")
+ public ExchangeValue retrieveExchangeValue
+ (@PathVariable String from, @PathVariable String to){
+
+ ExchangeValue exchangeValue =
+ repository.findByFromAndTo(from, to);
+
+ exchangeValue.setPort(
+ Integer.parseInt(environment.getProperty("local.server.port")));
+
+ return exchangeValue;
+ }
+}
diff --git a/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplication.java b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplication.java
new file mode 100644
index 00000000..a2cfa381
--- /dev/null
+++ b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplication.java
@@ -0,0 +1,12 @@
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CurrencyExchangeServiceApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CurrencyExchangeServiceApplication.class, args);
+ }
+}
diff --git a/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValue.java b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValue.java
new file mode 100644
index 00000000..a7dfe033
--- /dev/null
+++ b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValue.java
@@ -0,0 +1,61 @@
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class ExchangeValue {
+
+ @Id
+ private Long id;
+
+ @Column(name="currency_from")
+ private String from;
+
+ @Column(name="currency_to")
+ private String to;
+
+ private BigDecimal conversionMultiple;
+ private int port;
+
+ public ExchangeValue() {
+
+ }
+
+
+ public ExchangeValue(Long id, String from, String to, BigDecimal conversionMultiple) {
+ super();
+ this.id = id;
+ this.from = from;
+ this.to = to;
+ this.conversionMultiple = conversionMultiple;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public String getFrom() {
+ return from;
+ }
+
+ public String getTo() {
+ return to;
+ }
+
+ public BigDecimal getConversionMultiple() {
+ return conversionMultiple;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+
+}
diff --git a/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValueRepository.java b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValueRepository.java
new file mode 100644
index 00000000..bc6328c6
--- /dev/null
+++ b/03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValueRepository.java
@@ -0,0 +1,8 @@
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ExchangeValueRepository extends
+ JpaRepository{
+ ExchangeValue findByFromAndTo(String from, String to);
+}
diff --git a/03.microservices/currency-exchange-service/src/main/resources/application.properties b/03.microservices/currency-exchange-service/src/main/resources/application.properties
new file mode 100644
index 00000000..78b15c1f
--- /dev/null
+++ b/03.microservices/currency-exchange-service/src/main/resources/application.properties
@@ -0,0 +1,5 @@
+spring.application.name=currency-exchange-service
+server.port=8000
+
+spring.jpa.show-sql=true
+spring.h2.console.enabled=true
\ No newline at end of file
diff --git a/03.microservices/currency-exchange-service/src/main/resources/data.sql b/03.microservices/currency-exchange-service/src/main/resources/data.sql
new file mode 100644
index 00000000..dd914c5f
--- /dev/null
+++ b/03.microservices/currency-exchange-service/src/main/resources/data.sql
@@ -0,0 +1,6 @@
+insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
+values(10001,'USD','INR',65,0);
+insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
+values(10002,'EUR','INR',75,0);
+insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
+values(10003,'AUD','INR',25,0);
\ No newline at end of file
diff --git a/03.microservices/currency-exchange-service/src/test/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplicationTests.java b/03.microservices/currency-exchange-service/src/test/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplicationTests.java
new file mode 100644
index 00000000..f4f82fe1
--- /dev/null
+++ b/03.microservices/currency-exchange-service/src/test/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplicationTests.java
@@ -0,0 +1,16 @@
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class CurrencyExchangeServiceApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/03.microservices/step17.md b/03.microservices/step17.md
new file mode 100644
index 00000000..daa2b1bd
--- /dev/null
+++ b/03.microservices/step17.md
@@ -0,0 +1,761 @@
+
+## Complete Code Example
+
+
+### /currency-exchange-service/pom.xml
+
+```xml
+
+
+ 4.0.0
+
+ com.in28minutes.microservices
+ currency-exchange-service
+ 0.0.1-SNAPSHOT
+ jar
+
+ currency-exchange-service
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.0.M3
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ Finchley.M2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-config
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
+```
+---
+
+### /currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeController.java
+
+```java
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import java.math.BigDecimal;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class CurrencyExchangeController {
+
+ @Autowired
+ private Environment environment;
+
+ @Autowired
+ private ExchangeValueRepository repository;
+
+ @GetMapping("/currency-exchange/from/{from}/to/{to}")
+ public ExchangeValue retrieveExchangeValue
+ (@PathVariable String from, @PathVariable String to){
+
+ ExchangeValue exchangeValue =
+ repository.findByFromAndTo(from, to);
+
+ exchangeValue.setPort(
+ Integer.parseInt(environment.getProperty("local.server.port")));
+
+ return exchangeValue;
+ }
+}
+```
+---
+
+### /currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplication.java
+
+```java
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CurrencyExchangeServiceApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CurrencyExchangeServiceApplication.class, args);
+ }
+}
+```
+---
+
+### /currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValue.java
+
+```java
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class ExchangeValue {
+
+ @Id
+ private Long id;
+
+ @Column(name="currency_from")
+ private String from;
+
+ @Column(name="currency_to")
+ private String to;
+
+ private BigDecimal conversionMultiple;
+ private int port;
+
+ public ExchangeValue() {
+
+ }
+
+
+ public ExchangeValue(Long id, String from, String to, BigDecimal conversionMultiple) {
+ super();
+ this.id = id;
+ this.from = from;
+ this.to = to;
+ this.conversionMultiple = conversionMultiple;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public String getFrom() {
+ return from;
+ }
+
+ public String getTo() {
+ return to;
+ }
+
+ public BigDecimal getConversionMultiple() {
+ return conversionMultiple;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+
+}
+```
+---
+
+### /currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/ExchangeValueRepository.java
+
+```java
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ExchangeValueRepository extends
+ JpaRepository{
+ ExchangeValue findByFromAndTo(String from, String to);
+}
+```
+---
+
+### /currency-exchange-service/src/main/resources/application.properties
+
+```properties
+spring.application.name=currency-exchange-service
+server.port=8000
+
+spring.jpa.show-sql=true
+spring.h2.console.enabled=true
+```
+---
+
+### /currency-exchange-service/src/main/resources/data.sql
+
+```
+insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
+values(10001,'USD','INR',65,0);
+insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
+values(10002,'EUR','INR',75,0);
+insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
+values(10003,'AUD','INR',25,0);
+```
+---
+
+### /currency-exchange-service/src/test/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeServiceApplicationTests.java
+
+```java
+package com.in28minutes.microservices.currencyexchangeservice;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class CurrencyExchangeServiceApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+```
+---
+
+### /git-localconfig-repo/limits-service-dev.properties
+
+```properties
+limits-service.minimum=1
+```
+---
+
+### /git-localconfig-repo/limits-service-qa.properties
+
+```properties
+limits-service.minimum=2
+limits-service.maximum=222
+```
+---
+
+### /git-localconfig-repo/limits-service.properties
+
+```properties
+limits-service.minimum=8
+limits-service.maximum=888
+```
+---
+
+### /limits-service/pom.xml
+
+```xml
+
+
+ 4.0.0
+
+ com.in28minutes.microservices
+ limits-service
+ 0.0.1-SNAPSHOT
+ jar
+
+ limits-service
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.0.M3
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ Finchley.M2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-config
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
+```
+---
+
+### /limits-service/src/main/java/com/in28minutes/microservices/limitsservice/bean/LimitConfiguration.java
+
+```java
+package com.in28minutes.microservices.limitsservice.bean;
+
+public class LimitConfiguration {
+ private int maximum;
+ private int minimum;
+
+ protected LimitConfiguration() {
+
+ }
+
+ public LimitConfiguration(int maximum, int minimum) {
+ super();
+ this.maximum = maximum;
+ this.minimum = minimum;
+ }
+
+ public int getMaximum() {
+ return maximum;
+ }
+
+ public int getMinimum() {
+ return minimum;
+ }
+
+}
+```
+---
+
+### /limits-service/src/main/java/com/in28minutes/microservices/limitsservice/Configuration.java
+
+```java
+package com.in28minutes.microservices.limitsservice;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties("limits-service")
+public class Configuration {
+
+ private int minimum;
+ private int maximum;
+
+ public void setMinimum(int minimum) {
+ this.minimum = minimum;
+ }
+
+ public void setMaximum(int maximum) {
+ this.maximum = maximum;
+ }
+
+ public int getMinimum() {
+ return minimum;
+ }
+
+ public int getMaximum() {
+ return maximum;
+ }
+
+}
+```
+---
+
+### /limits-service/src/main/java/com/in28minutes/microservices/limitsservice/LimitsConfigurationController.java
+
+```java
+package com.in28minutes.microservices.limitsservice;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.in28minutes.microservices.limitsservice.bean.LimitConfiguration;
+
+@RestController
+public class LimitsConfigurationController {
+
+ @Autowired
+ private Configuration configuration;
+
+ @GetMapping("/limits")
+ public LimitConfiguration retrieveLimitsFromConfigurations() {
+ return new LimitConfiguration(configuration.getMaximum(),
+ configuration.getMinimum());
+ }
+
+}
+```
+---
+
+### /limits-service/src/main/java/com/in28minutes/microservices/limitsservice/LimitsServiceApplication.java
+
+```java
+package com.in28minutes.microservices.limitsservice;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class LimitsServiceApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(LimitsServiceApplication.class, args);
+ }
+}
+```
+---
+
+### /limits-service/src/main/resources/bootstrap.properties
+
+```properties
+spring.application.name=limits-service
+spring.cloud.config.uri=http://localhost:8888
+spring.profiles.active=qa
+```
+---
+
+### /limits-service/src/test/java/com/in28minutes/microservices/limitsservice/LimitsServiceApplicationTests.java
+
+```java
+package com.in28minutes.microservices.limitsservice;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class LimitsServiceApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+```
+---
+
+### /spring-cloud-config-server/pom.xml
+
+```xml
+
+
+ 4.0.0
+
+ com.in28minutes.microservices
+ spring-cloud-config-server
+ 0.0.1-SNAPSHOT
+ jar
+
+ spring-cloud-config-server
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.0.M3
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ Finchley.M2
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-config-server
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+
+```
+---
+
+### /spring-cloud-config-server/src/main/java/com/in28minutes/microservices/springcloudconfigserver/SpringCloudConfigServerApplication.java
+
+```java
+package com.in28minutes.microservices.springcloudconfigserver;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.config.server.EnableConfigServer;
+
+@EnableConfigServer
+@SpringBootApplication
+public class SpringCloudConfigServerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringCloudConfigServerApplication.class, args);
+ }
+}
+```
+---
+
+### /spring-cloud-config-server/src/main/resources/application.properties
+
+```properties
+spring.application.name=spring-cloud-config-server
+server.port=8888
+spring.cloud.config.server.git.uri=file:///in28Minutes/git/spring-micro-services/03.microservices/git-localconfig-repo
+```
+---
+
+### /spring-cloud-config-server/src/test/java/com/in28minutes/microservices/springcloudconfigserver/SpringCloudConfigServerApplicationTests.java
+
+```java
+package com.in28minutes.microservices.springcloudconfigserver;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SpringCloudConfigServerApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+```
+---
diff --git a/03.microservices/step17.zip b/03.microservices/step17.zip
new file mode 100644
index 00000000..b49ee043
Binary files /dev/null and b/03.microservices/step17.zip differ