1.注冊中心server端
1.1.引入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.2.配置
server:port: 8761
spring:application:name: eureka-server #服務名稱,如多臺server,那么保持一致security: #security用戶名密碼user:name: rootpassword: root
eureka:instance:hostname: localhostprefer-ip-address: true #設置顯示ip地址instance-id: ${spring.cloud.client.ipaddress}:${server.port}client:fetch-registry: false #是否注冊自己默認為true,如果register-with-eureka: falseservice-url: #注冊中心地址 root:root@ 為security用戶名密碼defaultZone: http://root:root@localhost:8761/eureka/ #http://root:root@${eureka.instance.hostname}:${server.port}/eureka/
1.3.server端security配置
@EnableWebSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {super.configure(http);//解決/eureka下的跨域問題http.csrf().ignoringAntMatchers("/eureka/**");}}
1.4.啟動類加上
@EnableEurekaServer
2.provider服務提供方
2.1.client端依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2.client配置
server:port: 7070spring:application:name: service-provider #服務名稱,多來provider服務名保持一致eureka:instance:hostname: localhostprefer-ip-address: trueinstance-id: ${spring.cloud.client.ipaddress}:${server.port}client:service-url: defaultZone: http://root:root@localhost:8761/eureka/ #,http://localhost:8762/eureka/ 注冊中心url多個注冊中心用","分隔service-provider: #ribbon配置 service-provider為服務名ribbon: #RandomRule為輪詢NFLoadBlanceRuleClassName: com.netflix.loadblancer.RandomRule
2.3.提供服務接口
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@GetMapping("/getUserByName/{name}")public User getUserByName(@PathVariable String name){log.info("name={}",name);return new User("王渝",22);}
}
2.4.開啟client
@EnableEurekaClient //可以不加
3.consumer服務使用方
3.1.依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.2.配置
server:port: 9090spring:application:name: service-consumereureka:client:service-url: #注冊中心向外暴露的地址defaultZone: http://root:root@localhost:8761/eureka/ #,http://localhost:8762/eureka/ 多臺server已逗號分隔register-with-eureka: falseregistry-fetch-interval-seconds: 10 #表示EurekaClient間隔多久去拉去注冊信息 默認30秒
3.3.Controller接口
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserServiceFeign userServiceFeign;@GetMapping("/name2/{name}")public User getUserByName2(@PathVariable String name){return userServiceFeign.getUserName(name);}
}
3.4.Service接口(方法一 feign調用)
//service-provide為服務提供方的名稱
@FeignClient(value = "service-provider")
public interface UserServiceFeign {// /user/getUserByName/{name} 為消息提供方的url@GetMapping("/user/getUserByName/{name}") User getUserName(@PathVariable(value = "name") String name);}
3.5Service接口(方法二 RestTemplate)
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate RestTemplate restTemplate;@Overridepublic User getUserByName(String name) {ResponseEntity<User> response = restTemplate.exchange("http://service-provider/user/getUserByName/" + name,HttpMethod.GET,null,new ParameterizedTypeReference<User>() {});return response.getBody();}
}