本文共 5177 字,大约阅读时间需要 17 分钟。
创建cloudalibaba-provider-payment9001模拟支付模块:
依赖:cloud2020 pers.zhang.springcloud 1.0-SNAPSHOT 4.0.0 cloudalibaba-provider-payment9001 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test
配置:application.yml
server: port: 9001spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址management: endpoints: web: exposure: include: '*'
Controller:
@RestControllerpublic class PaymentController { @Value("${server.port}") String serverPort; @GetMapping("/payment/nacos/{id}") public String getPayment(@PathVariable("id") Long id){ return "nacos registry, serverPort:" + serverPort + "\t id" + id; }}
启动类:
@SpringBootApplication@EnableDiscoveryClientpublic class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class, args); }}
测试:启动Nacos,启动9001微服务:
首先,根据上文的9001微服务再创建一个9002微服务。
新建cloudalibaba-consumer-nacos-order83模拟订单模块
依赖:
cloud2020 pers.zhang.springcloud 1.0-SNAPSHOT 4.0.0 cloudalibaba-consumer-nacos-order83 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery pers.zhang.springcloud cloud-api-commons ${project.version} org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test
配置:application.yml
server: port: 83spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)service-url: nacos-user-service: http://nacos-payment-provider
@Configurationpublic class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); }}
Controller:
@RestController@Slf4jpublic class OrderNacosController { @Resource RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") String serverURL; @GetMapping("/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { String result = restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class); return result; }}
启动类:
@SpringBootApplication@EnableDiscoveryClientpublic class OrderNacosMain83 { public static void main(String[] args) { SpringApplication.run(OrderNacosMain83.class, args); }}
启动Nacos,启动9001和9002,以及83端口微服务:
查看8848控制台,注册成功。
访问:localhost:83/consumer/payment/nacos/222
,轮询负载OK。 Nacos集成了Ribbon,自带负载均衡。 Nacos全景图:
Nacos与CAP:
何时选用哪种模式?
一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如Spring Cloud 和 Dubbo服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
如果需要在服务级别编辑或者存储配置信息,那么CP是必须的,K8S服务和DNS服务则适用于CP模式。CP模式下支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
curl -X PUT `$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
转载地址:http://vppqb.baihongyu.com/