MicroServices with Spring: Difference between revisions
From My Limbic Wiki
(→Eureka) |
|||
Line 6: | Line 6: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! scope="col"| | ! scope="col"| / | ||
! scope="col"| | ! scope="col"| Main | ||
! scope="col"| | ! scope="col"| Pom.xml | ||
! scope="col"| | ! scope="col"| Properties | ||
|- | |- | ||
! scope="row"| | ! scope="row"| Server | ||
| | | | ||
* com.microservices.server.EurekaServerApplication.java | * com.microservices.server.EurekaServerApplication.java | ||
Line 17: | Line 17: | ||
'''@EnableEurekaServer''' // Enable eureka server | '''@EnableEurekaServer''' // Enable eureka server | ||
| | | | ||
* Dependencies | |||
spring-'''cloud'''-starter-'''netflix-eureka-server''' | |||
spring-boot : web, test & devtools | |||
com.sun.xml.bind: jaxb-'''core,api,impl''' | |||
* dependencyManagement | |||
org.springframework.'''cloud''': spring-'''cloud-dependencies''' | |||
* Repositories | |||
https://repo.spring.io/'''milestone''' | |||
| | |||
spring.application.'''name'''=eureka-server | |||
server.'''port'''=8761 | |||
eureka.'''client.register-with-eureka=false''' | |||
eureka.'''client.fetch-registry=false''' | |||
|- | |||
! scope="row"| Zuul | |||
| | |||
* com.microservices.zuul.EurekaZuulApplication.java | * com.microservices.zuul.EurekaZuulApplication.java | ||
@SpringBootApplication | @SpringBootApplication | ||
Line 36: | Line 52: | ||
} | } | ||
| | | | ||
server.'''port'''=8762 | |||
spring.application.'''name'''=zuul-server | |||
eureka.'''client.service-url.default-zone'''=http://localhost:8761/eureka/ | |||
#zuul.'''prefix'''=/api | |||
''' | * Disable accessing services using service name (i.e. gallery-service). | ||
zuul.'''ignored-services=*''' | |||
''' | * Map paths to services | ||
zuul.routes.'''gallery-service.path'''=/gallery/** | |||
zuul.routes.'''gallery-service.service-id'''=gallery-service | |||
zuul.routes.'''auth-service.path'''=/auth/** | |||
zuul.routes.'''auth-service.service-id'''=AUTH-SERVICE$ | |||
* So, if request is "/gallery/view/1", gallery service will get "/view/1". | |||
* | zuul.routes.'''auth-service.strip-prefix'''=false | ||
zuul.routes.'''auth-service.sensitive-headers'''=Cookie,Set-Cookie #Exclude authorization from sensitive headers | |||
* | |||
* Dependencies | * Dependencies | ||
spring-'''cloud'''-starter-'''netflix-eureka-client''' | spring-'''cloud'''-starter-'''netflix-eureka-client''' | ||
Line 68: | Line 77: | ||
* Repositories | * Repositories | ||
https://repo.spring.io/'''milestone''' | https://repo.spring.io/'''milestone''' | ||
| | |||
|- | |||
! scope="row"| Image | |||
| | |||
* com.microservices.image.'''EurekaImageApplication.java''' | |||
@SpringBootApplication | |||
'''@EnableEurekaClient''' | |||
* com.microservices.image.'''controllers.ImageController.java''' | |||
'''@RestController''' | |||
'''@RequestMapping("/")''' | |||
'''@Autowired''' | |||
private Environment env; | |||
* com.microservices.image.'''entities.Image.java''' | |||
| | | | ||
* Dependencies | * Dependencies | ||
Line 77: | Line 99: | ||
* Repositories | * Repositories | ||
https://repo.spring.io/'''milestone''' | https://repo.spring.io/'''milestone''' | ||
| | | | ||
spring.application.'''name'''=image-service | spring.application.'''name'''=image-service | ||
server.'''port'''=8200 | server.'''port'''=8200 | ||
eureka.client.service-'''url.default'''-zone=http://localhost:8761/eureka | eureka.client.service-'''url.default'''-zone=http://localhost:8761/eureka | ||
! scope="row"| Gallery | |||
| | |||
| | |||
| | |||
! scope="row"| Common | |||
! scope=" | | | ||
| | |||
! scope="row"| | |||
| | |||
* com.microservices.common | * com.microservices.common | ||
@SpringBootApplication | @SpringBootApplication | ||
Line 126: | Line 121: | ||
'''@Value("${security.jwt.secret:JwtSecretKey}")''' | '''@Value("${security.jwt.secret:JwtSecretKey}")''' | ||
* com.microservices.common.'''security'''.UserRole.java | * com.microservices.common.'''security'''.UserRole.java | ||
| | |||
* Dependencies | |||
spring-cloud-starter-'''netflix-eureka-client''' | |||
'''org.projectlombok''': '''lombok''' | |||
spring-boot : web, test & devtools | |||
* dependencyManagement | |||
org.springframework.'''cloud''': spring-'''cloud-dependencies''' | |||
* Repositories | |||
https://repo.spring.io/'''milestone''' | |||
| | |||
spring.application.'''name'''=common-service | |||
server.'''port'''=9200 | |||
eureka.'''client.service-url.default-zone'''=http://localhost:8761/eureka | |||
! scope="row"| Auth | |||
| | | | ||
* com.microservices.'''auth'''.SpringEurekaAuthApp.java | * com.microservices.'''auth'''.SpringEurekaAuthApp.java | ||
Line 152: | Line 161: | ||
'''@Override''' | '''@Override''' | ||
public '''UserDetails''' | public '''UserDetails''' | ||
| | | | ||
* Dependencies | * Dependencies | ||
Line 174: | Line 172: | ||
* Repositories | * Repositories | ||
https://repo.spring.io/'''milestone''' | https://repo.spring.io/'''milestone''' | ||
| | | | ||
spring.application.'''name'''=auth-service | spring.application.'''name'''=auth-service |
Revision as of 22:35, 21 September 2019
Vulgarization
Specificities in a Spring aborescence
Eureka
Is the registration service, all services will connect to the same adress: http://localhost:9000 for example
/ | Main | Pom.xml | Properties | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Server |
@SpringBootApplication @EnableEurekaServer // Enable eureka server |
spring-cloud-starter-netflix-eureka-server spring-boot : web, test & devtools com.sun.xml.bind: jaxb-core,api,impl
org.springframework.cloud: spring-cloud-dependencies
https://repo.spring.io/milestone |
spring.application.name=eureka-server server.port=8761 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false | ||||||||||||
Zuul |
@SpringBootApplication @EnableEurekaClient @EnableZuulProxy
@Component
//import com.eureka.common.security.JwtConfig; private final JwtConfig jwtConfig;
@EnableWebSecurity @Autowired //import com.eureka.common.security.JwtConfig; private JwtConfig jwtConfig; @Bean public JwtConfig jwtConfig() { return new JwtConfig(); } |
server.port=8762 spring.application.name=zuul-server eureka.client.service-url.default-zone=http://localhost:8761/eureka/ #zuul.prefix=/api
zuul.ignored-services=*
zuul.routes.gallery-service.path=/gallery/** zuul.routes.gallery-service.service-id=gallery-service zuul.routes.auth-service.path=/auth/** zuul.routes.auth-service.service-id=AUTH-SERVICE$
zuul.routes.auth-service.strip-prefix=false zuul.routes.auth-service.sensitive-headers=Cookie,Set-Cookie #Exclude authorization from sensitive headers
spring-cloud-starter-netflix-eureka-client spring-cloud-starter-netflix-zuul o.jsonwebtoken: jjwt com.microservices.common: SpringEurekaCommon spring-boot : web, test, devtools & security com.sun.xml.bind: jaxb-core,api,impl
org.springframework.cloud: spring-cloud-dependencies
https://repo.spring.io/milestone |
|||||||||||||
Image |
@SpringBootApplication @EnableEurekaClient
@RestController @RequestMapping("/") @Autowired private Environment env;
|
spring-cloud-starter-netflix-eureka-client spring-boot : web, test & devtools org.springframework.cloud: spring-cloud-starter-sleuth
org.springframework.cloud: spring-cloud-dependencies
https://repo.spring.io/milestone |
spring.application.name=image-service server.port=8200 eureka.client.service-url.default-zone=http://localhost:8761/eureka |
Gallery | Common |
@SpringBootApplication @EnableEurekaClient
@Getter @ToString @Value("${security.jwt.uri:/auth/**}") @Value("${security.jwt.header:Authorization}") @Value("${security.jwt.prefix:Bearer }") @Value("${security.jwt.expiration:#{24*60*60}}") @Value("${security.jwt.secret:JwtSecretKey}")
|
spring-cloud-starter-netflix-eureka-client org.projectlombok: lombok spring-boot : web, test & devtools
org.springframework.cloud: spring-cloud-dependencies
https://repo.spring.io/milestone |
spring.application.name=common-service server.port=9200 eureka.client.service-url.default-zone=http://localhost:8761/eureka |
Auth |
@SpringBootApplication @EnableEurekaClient
@EnableWebSecurity @Autowired private UserDetailsService userDetailsService; @Autowired //import com.eureka.common.security.JwtConfig; private JwtConfig jwtConfig; @Bean public JwtConfig jwtConfig() { return new JwtConfig(); } @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
@Service @Autowired private BCryptPasswordEncoder encoder; @Override public UserDetails |
spring-cloud-starter-netflix-eureka-client spring-boot : web, test, devtools & Security io.jsonwebtoken: jjwt com.microservices.common: SpringEurekaCommon com.sun.xml.bind: jaxb-core,api,impl
org.springframework.cloud: spring-cloud-dependencies
https://repo.spring.io/milestone |
spring.application.name=auth-service server.port=9100 eureka.client.service-url.default-zone=http://localhost:8761/eureka |