创建消费服务
创建一个服务名称是order8001,搭建过程不再详细说了,跟之前类似。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloudstudy</artifactId>
<groupId>com.study</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>order8001</artifactId>
<dependencies>
<!-- open feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
创建application.yml
server:
port: 8001
spring:
application:
name: nacos-order-consumer #本服务的名称
cloud: #注册到nacos
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: "*"
service-payment-url: http://nacos-payment-provider #服务地址,就是之前创建的服务的spring.application.name
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Order8001 {
public static void main(String[] args) {
SpringApplication.run(Order8001.class,args);
}
}
创建一个config包创建一个RestTemplateConfig类:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
创建controller包OrderController类
@RestController
public class OrderController {
@Value("${service-payment-url}") //你在yml里面配置的
String baseUrl;
@Autowired
RestTemplate restTemplate;
@GetMapping(value = "order/sayOrder")
public String sayOrder(){
return restTemplate.getForObject(baseUrl+"/payment/sayHellow",String.class);
}
}
启动9001,9002,8001 访问localhost:8001/order/sayOrder,多访问几次会发现9001和9002会被轮换调用,这就是ribbon负载均衡的作用
打开idea的maven会发现ribbon的包在nacos包里面,如下图
现在把Order8001改造成使用Feign,项目已经在pom里面加入了Feign的坐标了,可以看一下。
首先在启动类上加一个注解开启Feign
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Order8001 {
public static void main(String[] args) {
SpringApplication.run(Order8001.class,args);
}
}
在application.yml添加
#设置feign客户端超时时间
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
创建service包PaymentService接口,注意是接口
@Component
@FeignClient(value = "nacos-payment-provider")
public interface PaymentService {
@GetMapping(value = "/payment/sayHellow")
public String sayHellow();
}
在OrderController中引入PaymentService,并且添加一个方法
@RestController
public class OrderController {
@Value("${service-payment-url}") //你在yml里面配置的
String baseUrl;
@Autowired
RestTemplate restTemplate;
@Autowired
PaymentService paymentService;
@GetMapping(value = "order/sayOrder")
public String sayOrder(){
return restTemplate.getForObject(baseUrl+"/payment/sayHellow",String.class);
}
@GetMapping(value = "order/sayHellow")
public String sayHellow(){
return paymentService.sayHellow();
}
}
依次启动三个服务,访问localhost:8001/order/sayHellow,结果跟之前一样,改造成功