-
eureka端
- 建立一个springBoot项目,然后导入jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
</exclusions>
</dependency>
- 配置信息
server:
port: 7001
eureka:
instance:
hostname: localhost #eureka实例所在的主机名
client:
fetch-registry: false # 是否从eureka中获取信息
register-with-eureka: false # 是否注册到eureka
server:
eviction-interval-timer-in-ms: 1000 # 设置清理的时间,单位是毫秒
enable-self-preservation: false # 关闭保护模式
- 在启动类中开启服务注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
- 启动项目
服务端
- 也是新建一个springboot项目,导入jar
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency> <!-- 进行SpringCloud依赖包的导入处理 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- 进行配置
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: provider
prefer-ip-address: true # 显示ip地址
lease-renewal-interval-in-seconds: 2 # 设置心跳的间隔时间单位秒
lease-expiration-duration-in-seconds: 5 # 表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance
spring:
application:
name: product
- 在启动类中开启客户端注解
@EnableEurekaClient
@SpringBootApplication
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class, args);
}
}
- 启动项目,可以发现已经注册到了eureka
-
消费端
- 导入jar
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
</exclusions>
</dependency>
-
添加配置类
@Configuration
public class RestConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public HttpHeaders getHeaders() { // 要进行一个Http头信息配置
HttpHeaders headers = new HttpHeaders(); // 定义一个HTTP的头信息
String auth = "admin:123456"; // 认证的原始信息
byte[] encodedAuth = Base64.getEncoder()
.encode(auth.getBytes(Charset.forName("US-ASCII"))); // 进行一个加密的处理
String authHeader = "Basic " + new String(encodedAuth);
headers.set("Authorization", authHeader);
return headers;
}
}
-
添加配置
eureka:
client:
service-url:
# defaultZone: http://admin:123456@eureka1:7001/eureka,http://admin:123456@eureka2:7002/eureka,http://admin:123456@eureka3:7003/eureka
defaultZone: http://admin:123456@eureka1:7001/eureka
register-with-eureka: false
-
在启动类上添加注解
@EnableEurekaClient
-
调用接口
public static final String PRODUCT_GET_URL = "http://PRODUCT/test/get/";
@Resource
private RestTemplate restTemplate;
@Resource
private HttpHeaders httpHeaders;
@RequestMapping("/get")
public String get(String id) {
ResponseEntity<String> exchange = restTemplate.exchange(PRODUCT_GET_URL + id, HttpMethod.GET, new HttpEntity<>(httpHeaders), String.class);
return JSON.toJSONString(exchange);
}
-
完成
-
添加权限控制
- 在eureka中添加jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 配置账号密码
spring:
security:
user:
name: admin
password: 123456
- 添加配置类
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}
- 在服务端(客户端也一样)也引入security包
- 修改service-url写法
eureka:
client:
service-url:
# defaultZone: http://localhost:7001/eureka
defaultZone: http://admin:123456@localhost:7001/eureka
- 重启服务,完成