消费者模块编写restTemplate配置类,即可在控制层调用提供者模块
// 配置类
@Configuration
public class ApplicationContextConfig {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
// 控制层通过restTemplate
@RestController
public class OrderController {
// 被调用者的ip+端口
public static final String PAYMENT_URL = "http://localhost:8001";
// 注入
@Resource
private RestTemplate restTemplate;
// 访问http://localhost:80/consumer/payment/create,即可访问到被调用者的接口
@GetMapping("/consumer/payment/create")
public CommonResult
// 参数为:被调用者的ip+端口+接口名,参数,返回值
return restTemplate.postForObject(PAYMENT_URL+"/payment/create", payment, CommonResult.class);
}
}
用于服务调用和服务调用时的负载
// nginx实现负载均衡属于集中式LB,即在服务的消费方和提供方提供LB设施,当消费方发请求调提供方时,消费方的请求会先进入nginx,通过nginx转发分配到提供方集群
// Ribbon属于进程内LB,消费方自己选择调用哪个提供方
// 当消费者模块调用提供者模块集群时,在消费者模块自定义规则类;自定义的规则类不能放在@ComponentScan所扫描的当前包及其子包下
@Configuration
public class MySelfRule {
@Bean
public IRule myRule(){
return new RandomRule();
}
}
// 在消费者模块的启动类添加注解,指定要负载的集群和自定义的负载规则;前提是这个集群和当前消费者模块已经注册到服务注册中心
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)
用于服务调用,在消费者模块的业务层编写接口,接口中是提供者模块的控制层方法,消费者模块的控制层调用该接口
// 消费者模块通过openFeign调用提供者模块中的接口方法
// 在消费者模块引入openFeign依赖
// 启动类添加注解
@EnableFeignClients
// 新建feign接口
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE") // 指向服务提供者的服务名
public interface PaymentFeignService {
// 直接将提供者要调用的方法复制到该接口即可
@GetMapping(value = "/payment/get/{id}")
public CommonResult
}
// 控制层
@RestController
public class OrderFeignController {
// 注入接口
@Resource
private PaymentFeignService paymentFeignService;
// 通过访问当前模块:http://localhost:80/consumer/payment/get/{id}
@GetMapping(value = "/consumer/payment/get/{id}")
public CommonResult
return paymentFeignService.getPaymentById(id);
}
}
需新建一个module作为网关:用于反向代理,隐藏微服务的IP;用于负载均衡,访问网关,由网关进行请求转发;用于过滤,只有指定规则的请求才能进来
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: payment_routh # 路由的ID
uri: http://localhost:8001 # 匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** # 断言,路径相匹配的进行路由
gateWay网关实现负载均衡
#
spring:
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: payment_routh # 路由的ID
uri: lb://cloud-payment-service # 匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** # 断言,路径相匹配的进行路由
手机扫一扫
移动阅读更方便
你可能感兴趣的文章