springcloud-day01使用RestTRestTemplate + eureka实现远程调用
springcloud 使用RestTemplate 远程调用
- 注册中心(eureka)搭建
- 服务提供者搭建
- 消费者搭建
<!--父工程依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注册中心
// 非常简单 配置类加上@EnableEurekaServer注解就行了
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain {
public static void main(String[] args) {
SpringApplication.run(EurekaMain.class, args);
}
}
依赖
<!--eureka服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
application.yml
server:
port: 10086
eureka:
instance:
ip-address: 127.0.0.1 # 应用实例IP
client:
register-with-eureka: false # 是否将自己注册到eureka中
fetch-registry: false # 是否从eureka中获取信息
service-url: # 注册中心地址
defaultZone: http://127.0.0.1:10086/eureka/
服务提供者
// 非常简单 配置类加上@EnableEurekaClient注解注册服务
@SpringBootApplication
@EnableEurekaClient
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
暴露访问路由
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Value("${port}")
private String port;
@RequestMapping("/find/{id}")
public User findById(@PathVariable(value = "id") Integer id){
System.out.println("服务被调用: "+port);
return userService.findById(id);
}
}
服务端依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
服务端application.yml
# 配置应用基本信息和DB
server:
port: ${port}
spring:
application:
name: eureka-client-provider # 配置应用名称可以让消费者通过名称找到调用者
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: root
url: jdbc:mysql://127.0.0.1:3306/day25?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
# 配置eureka server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
消费者
@SpringBootApplication
@EnableEurekaClient // eureka客户端
@EnableCircuitBreaker // 熔断处理开启
public class ApplicationWebMain {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ApplicationWebMain.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
消费者代码
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/find/{id}")
@HystrixCommand(fallbackMethod = "findUserByIdFallbackMethod") // 指定熔断(调用服务者失败)时的处理
public String findUserById(@PathVariable(value = "id") Integer id){
String url = "http://eureka-client-provider/user/find/" + id;
return restTemplate.getForObject(url,String.class);
}
// 访问服务提供者失败后执行
public String findUserByIdFallbackMethod(@PathVariable(value = "id") Integer id){
return "findUserByIdFallbackMethod return String";
}
}
消费端依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--eureka-->
<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-netflix-hystrix</artifactId>
</dependency>
消费端application.yaml
# 配置应用基本信息
server:
port: 8080
spring:
application:
name: eureka-client-consumer
# 配置eureka server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
eureka-client-provider: # 服务名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 改变负载均衡策略为随机,默认轮询
什么垃圾文章 自己看了都想抽自己耳光