From 524fc5ee931577cbb3c33fb7feb5299bf7a5ac8a Mon Sep 17 00:00:00 2001 From: vr79x Date: Wed, 6 Dec 2017 15:48:38 +0530 Subject: [PATCH] Adding service discovery --- CART_SCHEMA/init.sql | 179 ++++++++++++++++++ README.md | 2 +- customer/src/main/resources/application.yml | 4 +- docker-compose.yml | 36 ++++ inventory/Dockerfile | 2 +- invoice/Dockerfile | 4 +- servicediscovery/.gitignore | 24 +++ servicediscovery/Dockerfile | 6 + servicediscovery/pom.xml | 64 +++++++ .../ServiceDiscoveryApplication.java | 14 ++ .../src/main/resources/application.yml | 15 ++ .../ServiceDiscoveryApplicationTests.java | 16 ++ 12 files changed, 360 insertions(+), 6 deletions(-) create mode 100644 CART_SCHEMA/init.sql create mode 100644 docker-compose.yml create mode 100644 servicediscovery/.gitignore create mode 100644 servicediscovery/Dockerfile create mode 100644 servicediscovery/pom.xml create mode 100644 servicediscovery/src/main/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplication.java create mode 100644 servicediscovery/src/main/resources/application.yml create mode 100644 servicediscovery/src/test/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplicationTests.java diff --git a/CART_SCHEMA/init.sql b/CART_SCHEMA/init.sql new file mode 100644 index 0000000..4b63819 --- /dev/null +++ b/CART_SCHEMA/init.sql @@ -0,0 +1,179 @@ +CREATE SCHEMA microservices_prod; + +USE microservices_prod; + +DROP TABLE IF EXISTS unit_type; +CREATE TABLE IF NOT EXISTS unit_type(ID BIGINT AUTO_INCREMENT PRIMARY KEY, UNIT_NAME VARCHAR(200) NOT NULL); + +DROP TABLE IF EXISTS categories; +CREATE TABLE IF NOT EXISTS categories ( + ID BIGINT AUTO_INCREMENT PRIMARY KEY, + CATEGORY_NAME VARCHAR(200) NOT NULL, + unit_type_ID BIGINT NOT NULL, + CONTROLLED BOOLEAN, + FOREIGN KEY (unit_type_ID) + REFERENCES unit_type (ID) +); + +SELECT * FROM categories; + +DROP TABLE IF EXISTS inventory; +CREATE TABLE IF NOT EXISTS inventory ( + ID BIGINT AUTO_INCREMENT PRIMARY KEY, + PRODUCT_NAME VARCHAR(200) NOT NULL, + QUANTITY BIGINT NOT NULL, + UNIT_PRICE DOUBLE(10,4), + PURCHASE_PRICE DOUBLE(10,4), + TAX_RATE INTEGER(99), + CATEGORY_ID BIGINT NOT NULL, + BRAND_NAME VARCHAR(200), + FOREIGN KEY (CATEGORY_ID) + REFERENCES categories (ID) +); +CREATE SCHEMA microservices_invoice; + +USE microservices_invoice; + +DROP TABLE IF EXISTS mode_of_pay; +CREATE TABLE IF NOT EXISTS mode_of_pay ( + ID BIGINT AUTO_INCREMENT PRIMARY KEY, + MODE_NAME VARCHAR(100) NOT NULL, + MODE_DESC VARCHAR(500) +); + +DROP TABLE IF EXISTS invoice; +CREATE TABLE IF NOT EXISTS invoice ( + ID BIGINT AUTO_INCREMENT PRIMARY KEY, + CUST_ID BIGINT NOT NULL, + ITEM_ID BIGINT NOT NULL, + QUANTITY INTEGER(5), + DATE_OF_PURCHASE DATETIME, + MODE_PAY_ID BIGINT NOT NULL, + TAX_AMT INTEGER, + CASHIER_NAME VARCHAR(500), + FOREIGN KEY (MODE_PAY_ID) + REFERENCES invoice (ID) +); + + +create schema microservices_cust; + +USE microservices_cust; + +DROP TABLE IF EXISTS customer; +CREATE TABLE IF NOT EXISTS customer(ID BIGINT AUTO_INCREMENT PRIMARY KEY, CUST_NAME VARCHAR(400) NOT NULL, +CUST_AGE INTEGER(3),MEMBERSHIP_ID BIGINT, CUST_PHONE_NUM BIGINT(10) NOT NULL, ALT_NUM BIGINT(10), PRIMARY_ADDR_ID BIGINT); + + +DROP TABLE IF EXISTS address; +CREATE TABLE IF NOT EXISTS address(ADDRESS_ID BIGINT AUTO_INCREMENT PRIMARY KEY, CUST_ID BIGINT NOT NULL,APARTMENT_NAME VARCHAR(500), +STREET_NAME VARCHAR(800),CITY VARCHAR(200),STATE VARCHAR(20),PIN INTEGER(10), FOREIGN KEY(CUST_ID) REFERENCES customer(ID)); + +/*DML---------------- */ + + +USE microservices_prod; + +INSERT INTO unit_type(UNIT_NAME) VALUES ('Per Unit'); + +INSERT INTO unit_type(UNIT_NAME) VALUES ('Per Kg'); + +SELECT * FROM unit_type; + + +INSERT INTO categories(unit_type_ID,CATEGORY_NAME,CONTROLLED) + VALUES (1,'CLOTHES',false); + + INSERT INTO categories(unit_type_ID,CATEGORY_NAME,CONTROLLED) + VALUES (2,'VEGETABLES',false); + +INSERT INTO categories(unit_type_ID,CATEGORY_NAME,CONTROLLED) + VALUES (1,'MEDICINES',true); + +INSERT INTO categories(unit_type_ID,CATEGORY_NAME,CONTROLLED) + VALUES (1,'MEDICINES',true); + +SELECT * FROM categories; + +/*run inventory inserts in a seprate command*/ +INSERT INTO inventory( + PRODUCT_NAME, + QUANTITY, + UNIT_PRICE, + PURCHASE_PRICE, + TAX_RATE, + CATEGORY_ID,BRAND_NAME) VALUES('Shirts', + 50, + 100, + 91, + 15, + 2,'Louis Phillipe'); + + INSERT INTO inventory( + PRODUCT_NAME, + QUANTITY, + UNIT_PRICE, + PURCHASE_PRICE, + TAX_RATE, + CATEGORY_ID,BRAND_NAME) VALUES('Pants', + 100, + 100, + 91, + 15, + 2,'Louis Phillipe'); + + INSERT INTO inventory( + PRODUCT_NAME, + QUANTITY, + UNIT_PRICE, + PURCHASE_PRICE, + TAX_RATE, + CATEGORY_ID) VALUES('Shimla Apples', + 1000, + 10, + 9, + 4, + 3); + + USE microservices_cust; +INSERT INTO customer(CUST_NAME, CUST_AGE, CUST_PHONE_NUM) VALUES('Hitesh Joshi',31,951911009); + +INSERT INTO address(CUST_ID,APARTMENT_NAME,STREET_NAME,CITY,STATE,PIN) + VALUES (1,'Hubris Residency','HSR layout','Bangalore','Karanataka',560037); + + + /*run customer inserts in a separate command*/ + INSERT INTO customer(CUST_NAME, CUST_AGE, CUST_PHONE_NUM) VALUES('Deepika Joshi',30,989220110); + +INSERT INTO address(CUST_ID,APARTMENT_NAME,STREET_NAME,CITY,STATE,PIN) + VALUES (1,'Vijaya Residency','Allahpur','Bangalore','Karanataka',560037); + + INSERT INTO address(CUST_ID,APARTMENT_NAME,STREET_NAME,CITY,STATE,PIN) + VALUES (2,'Vijaya Residency','KareemNagar','Allahbad','UP',560037); + + INSERT INTO address(CUST_ID,APARTMENT_NAME,STREET_NAME,CITY,STATE,PIN) + VALUES (1,'Muir Road','Near Bus stand','Almora','Uttarakhand',262501); + + + +UPDATE customer +SET + PRIMARY_ADDR_ID = 1 +WHERE + ID = 1; + +USE microservices_invoice; +insert into mode_of_pay(MODE_NAME,MODE_DESC) values('Cash','OTC cash settlement'); +insert into mode_of_pay(MODE_NAME,MODE_DESC) values('Card','OTC card settlement'); +insert into mode_of_pay(MODE_NAME,MODE_DESC) values('Online','Online through payment gateway'); +insert into mode_of_pay(MODE_NAME,MODE_DESC) values('Wallet','OTC through wallet'); + +select * from mode_of_pay; + +/*run invoice inserts in a seprate command*/ + +insert into invoice(CUST_ID,ITEM_ID,QUANTITY,DATE_OF_PURCHASE,MODE_PAY_ID,TAX_AMT,CASHIER_NAME) values(1,4,10,NOW(),2,5,'Venu Babu'); +insert into invoice(CUST_ID,ITEM_ID,QUANTITY,DATE_OF_PURCHASE,MODE_PAY_ID,TAX_AMT,CASHIER_NAME) values(1,3,10,'2017-10-01 00:00:00',2,5,'Venu Babu'); + +select * from invoice; + diff --git a/README.md b/README.md index e9285fb..cab7c50 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ To build and package a jar to target folder :
To start the Mysql container:
-docker run --name docker-mysql -e MYSQL_ROOT_PASSWORD=test -d mysql +docker run --name docker-mysql -e MYSQL_ROOT_PASSWORD=test -P -d mysql To Build the image from Docker File - Custom image as specified in the Dockerfile ---> (Note the .)
diff --git a/customer/src/main/resources/application.yml b/customer/src/main/resources/application.yml index f6d7761..92b543e 100644 --- a/customer/src/main/resources/application.yml +++ b/customer/src/main/resources/application.yml @@ -8,7 +8,7 @@ spring: hibernate: ddl-auto: none datasource: - url: jdbc:mysql://localhost:32769/microservices_cust + url: jdbc:mysql://localhost:32768/microservices_cust username: root password: test # thymeleaf: @@ -31,7 +31,7 @@ server: eureka: client: serviceUrl: - defaultZone: http://eureka:1111/eureka/ # using eureka instead of localhost + defaultZone: http://localhost:32770/eureka/ # using eureka instead of localhost instance: leaseRenewalIntervalInSeconds: 5 # DO NOT DO THIS IN PRODUCTION diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f006265 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +eureka: + image: springcloud/eureka + container_name: eureka + ports: + - "1111:1111" + net: "microservicesnet" +customer1: + image: hiteshjoshi1/microservice-docker-cart-example + container_name: customer1 + hostname: customer1 + net: "microservicesnet" + ports: + - "2222:8080" + volumes: + - C:\\Users\\hitjoshi\\Desktop\\Microservices\\ci_output:/data + command: -jar -Dspring.datasource.url=jdbc:mysql://docker-mysql/microservices_cust -Dspring.datasource.password=test /data/customer-0.0.1-SNAPSHOT.jar +inventory1: + image: hiteshjoshi1/microservice-docker-cart-example + container_name: inventory1 + hostname: inventory1 + net: "microservicesnet" + ports: + - "3333:8080" + volumes: + - C:\\Users\\hitjoshi\\Desktop\\Microservices\\ci_output:/data + command: -jar -Dspring.datasource.url=jdbc:mysql://docker-mysql/microservices_prod -Dspring.datasource.password=test /data/inventory-0.0.1-SNAPSHOT.jar +invoice1: + image: hiteshjoshi1/microservice-docker-cart-example + container_name: invoice1 + hostname: invoice1 + net: "microservicesnet" + ports: + - "4444:8080" + volumes: + - C:\\Users\\hitjoshi\\Desktop\\Microservices\\ci_output:/data + command: -jar -Dspring.datasource.url=jdbc:mysql://docker-mysql/microservices_invoice -Dspring.datasource.password=test /data/invoice-0.0.1-SNAPSHOT.jar \ No newline at end of file diff --git a/inventory/Dockerfile b/inventory/Dockerfile index 7659388..4daaa4c 100644 --- a/inventory/Dockerfile +++ b/inventory/Dockerfile @@ -3,4 +3,4 @@ VOLUME /tmp ADD /target/inventory-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 RUN bash -c 'touch /app.jar' -ENTRYPOINT ["java","-Dspring.datasource.url=jdbc:mysql://docker-mysql/microservices_prod","-Dspring.datasource.username=root","-Dspring.datasource.password=test","-jar","/app.jar"] \ No newline at end of file +ENTRYPOINT ["java","-Dspring.datasource.url=jdbc:mysql://docker-mysql/microservices_invoice","-Dspring.datasource.username=root","-Dspring.datasource.password=test","-jar","/app.jar"] \ No newline at end of file diff --git a/invoice/Dockerfile b/invoice/Dockerfile index 7659388..d222893 100644 --- a/invoice/Dockerfile +++ b/invoice/Dockerfile @@ -1,6 +1,6 @@ FROM java:8 VOLUME /tmp -ADD /target/inventory-0.0.1-SNAPSHOT.jar app.jar +ADD /target/invoice-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 RUN bash -c 'touch /app.jar' -ENTRYPOINT ["java","-Dspring.datasource.url=jdbc:mysql://docker-mysql/microservices_prod","-Dspring.datasource.username=root","-Dspring.datasource.password=test","-jar","/app.jar"] \ No newline at end of file +ENTRYPOINT ["java","-Dspring.datasource.url=jdbc:mysql://docker-mysql/microservices_invoice","-Dspring.datasource.username=root","-Dspring.datasource.password=test","-jar","/app.jar"] \ No newline at end of file diff --git a/servicediscovery/.gitignore b/servicediscovery/.gitignore new file mode 100644 index 0000000..2af7cef --- /dev/null +++ b/servicediscovery/.gitignore @@ -0,0 +1,24 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/servicediscovery/Dockerfile b/servicediscovery/Dockerfile new file mode 100644 index 0000000..64565b3 --- /dev/null +++ b/servicediscovery/Dockerfile @@ -0,0 +1,6 @@ +FROM java:8 +VOLUME /tmp +ADD /target/servicediscovery-0.0.1-SNAPSHOT.jar app.jar +EXPOSE 1111 +RUN bash -c 'touch /app.jar' +ENTRYPOINT ["java","-jar","/app.jar"] \ No newline at end of file diff --git a/servicediscovery/pom.xml b/servicediscovery/pom.xml new file mode 100644 index 0000000..f1fbc7a --- /dev/null +++ b/servicediscovery/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + com.hitesh.microservices + servicediscovery + 0.0.1-SNAPSHOT + jar + + servicediscovery + Eureka Service + + + org.springframework.boot + spring-boot-starter-parent + 1.5.9.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + Edgware.RELEASE + + + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + + + 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 + + + + + + diff --git a/servicediscovery/src/main/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplication.java b/servicediscovery/src/main/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplication.java new file mode 100644 index 0000000..0762af8 --- /dev/null +++ b/servicediscovery/src/main/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplication.java @@ -0,0 +1,14 @@ +package com.hitesh.microservices.servicediscovery; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class ServiceDiscoveryApplication { + + public static void main(String[] args) { + SpringApplication.run(ServiceDiscoveryApplication.class, args); + } +} diff --git a/servicediscovery/src/main/resources/application.yml b/servicediscovery/src/main/resources/application.yml new file mode 100644 index 0000000..8fe04ad --- /dev/null +++ b/servicediscovery/src/main/resources/application.yml @@ -0,0 +1,15 @@ +# Configure this Discovery Server +eureka: + instance: + hostname: localhost + client: # Not a client, don't register with yourself + registerWithEureka: false + fetchRegistry: false + +server: + port: 1111 # HTTP (Tomcat) port + +# Discovery Server Dashboard uses FreeMarker. Don't want Thymeleaf templates +spring: + thymeleaf: + enabled: false # Disable Thymeleaf \ No newline at end of file diff --git a/servicediscovery/src/test/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplicationTests.java b/servicediscovery/src/test/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplicationTests.java new file mode 100644 index 0000000..0490351 --- /dev/null +++ b/servicediscovery/src/test/java/com/hitesh/microservices/servicediscovery/ServiceDiscoveryApplicationTests.java @@ -0,0 +1,16 @@ +package com.hitesh.microservices.servicediscovery; + +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 ServiceDiscoveryApplicationTests { + + @Test + public void contextLoads() { + } + +}