需要注册中心 生产者 消费者
1.生产者模块创建
pom 主要是要有eureka依赖
<dependencies>
<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.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--eureka client-->
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<!--如果没写版本,从父层面找,找到了就直接用,全局统一-->
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hehe</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
配置文件 向eureka注册
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
# defaultZone:http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
# 抓取eureka中已注册的服务,集群服务必须开启,ribbon才能实现负载均衡
fetch-registry: true
# 是否向eureka注册自己
register-with-eureka: true
instance:
# eureka控制台显示的集群的id
instance-id: payment8001
# 显示集群实例ip
prefer-ip-address: true
启动类 开启eureka客户端
@SpringBootApplication
@EnableEurekaClient
@MapperScan(basePackages = "cn.hehe.payment.dao")
public class PaymentApplication8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentApplication8001.class,args);
}
}
需要feign调用的代接口
@GetMapping("selectOne")
public Result<Payment> selectOne(Integer id) {
Result<Payment> res = new Result<>(200,"操作成功:"+port,this.paymentService.queryById(id));
return res;
}
2.消费者模块搭建
pom文件 主要有openfeign和eureka依赖
<dependencies>
<dependency>
<groupId>cn.hehe</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置文件
eureka:
client:
# 抓取eureka中已注册的服务,集群服务必须开启,ribbon才能实现负载均衡
fetch-registry: true
# 是否向eureka注册自己
register-with-eureka: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
# defaultZone:http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
instance:
instance-id: order80
prefer-ip-address: true
主启动类 开启eureka客户端和feign客户端注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaOrderApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaOrderApplication.class,args);
}
}
编写feign客户端接口
@FeignClient("CLOUD-PAYMENT-SERVICE")
@Component
public interface PaymentFeginClient {
@GetMapping("/selectOne")
Result<Payment> selectOne(@RequestParam("id") Integer id);
@GetMapping("/timeout")
String timeOut();
}
feign客户端调用
@RestController
@RequestMapping("order")
public class OrderController {
@Autowired
private PaymentFeginClient paymentFeginClient;
@GetMapping("queryOrder")
public Result<Payment> queryOrder(Integer id) {
Result<Payment> paymentResult = paymentFeginClient.selectOne(id);
return paymentResult;
}
}
feign客户端超时调用解决方法
配置文件新增以下配置
#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的实际
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
feign日志打印
配置一下bean
@Bean
public Logger.Level getFeignLogger(){
return Logger.Level.FULL;
}
然后在配置文件中添加
logging:
level:
#feign日志以什么级别监控哪个路径下的接口
cn.hehe.order: debug
#可以指定具体某个接口
#cn.hehe.order.feign.PaymentFeginClient: debug