Spring Cloud Nacos(二)

12 篇文章 0 订阅
9 篇文章 0 订阅

Spring Cloud Nacos(二)

服务注册及发现

  • 集成nacos
  • 集成feign

新建服务客户端服务client-service
application.yml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
</dependency>
// 开启服务注册及发现
@EnableDiscoveryClient
// 开启Feign客户端
@EnableFeignClients
@SpringBootApplication
public class ClientServiceApplication {
	// ...
}
server:
  port: 9001

spring:
  application:
    name: client-service
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.79.8:9999
        service: ${spring.application.name}
        group: provider-consumer
feign:
  # 关闭ApacheHttpClient 开启 okhttp
  httpclient:
    enable: false
  okhttp:
    enable: true

新增FeignConfig

@Configuration
public class OpenFeignConfig {

    @Bean
    Logger.Level feignLogLevel() {
        return Logger.Level.FULL;
    }
}

新建客户端ProductController

@RestController
@Slf4j
public class ProductController {
    @Resource
    ProductService productService;

    @RequestMapping("/product/{id}")
    public String getProduct(@PathVariable("id") String id) {
        String value = productService.getProduct(id);
        log.info("value={}", value);
        return value;
    }

    @RequestMapping("/products")
    public String getProduct(@RequestParam(value = "limit", defaultValue = "20") String limit, @RequestParam(value = "page", defaultValue = "1") String page) {
        String value = productService.getProducts(limit, page);
        log.info("value={}", value);
        return value;
    }
}
@Component
// product-service 为 product-service application.yml spring.cloud.nacos.discovery.service 的值,此处注意大小写
@FeignClient(value = "product-service")
public interface ProductService {

    @GetMapping("/product/{id}")
    String getProduct(@PathVariable("id") String id);

    @GetMapping("/products")
    String getProducts(@RequestParam(value = "limit", defaultValue = "20") String limit, @RequestParam(value = "page", defaultValue = "1") String page);
}

新建服务客户端服务product-service
application.yml

server:
  port: 9006

spring:
  application:
    name: product-service
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.79.8:9999
        service: ${spring.application.name}
        group: provider-consumer
feign:
  httpclient:
    enable: false
  okhttp:
    enable: true

  compression:
    request:
      enabled: true
      min-request-size: 2048
      mime-types: application/json
    response:
      enabled: true
// 开启服务注册及发现
@EnableDiscoveryClient
@SpringBootApplication
public class ProductServiceApplication {
	// ...
}
@Getter
public class ResultData<T> {

    private T data;
    private int status;
    private String message;

    private ResultData() {
    }

    private ResultData(T data) {
        this.data = data;
    }

    public static ResultData success() {
        return new ResultData();
    }

    public static <T> ResultData success(T data) {
        return new ResultData(data);
    }

    public static ResultData failure(int status, String message) {
        ResultData resultData = new ResultData();
        resultData.status = status;
        resultData.message = message;
        return resultData;
    }

    public static ResultData failure(int status) {
        return failure(status, null);
    }
}

生成服务端ProductController

@RestController
@Slf4j
public class ProductController {

    @Resource
    ProductService productService;

    @GetMapping("/products")
    public ResultData<List<ProductVo>> list(@RequestParam(value = "limit", defaultValue = "20") String limit, @RequestParam(value = "page", defaultValue = "1") String page) {
        log.info("ProductController#list()");
        return ResultData.success(productService.getProducts());
    }

    @GetMapping("/product/{id}")
    public ResultData<ProductVo> getProduct(@PathVariable("id") String id) {
        log.info("ProductController#getProduct()");
        return ResultData.success(productService.getProduct(id));
    }
}
@Service
public class ProductService {

    List<ProductVo> productVos = Arrays.asList(
            ProductVo.builder().id("1").name("product01").build(),
            ProductVo.builder().id("2").name("product02").build(),
            ProductVo.builder().id("3").name("product03").build(),
            ProductVo.builder().id("4").name("product04").build(),
            ProductVo.builder().id("5").name("product05").build()
    );

    public List<ProductVo> getProducts() {
        return productVos;
    }

    public ProductVo getProduct(String id) {
        return productVos.get(Integer.parseInt(id));
    }
}

启动2个product-service实例 通过设置server.port不同值
启动1个client-service实例
通过请求 client提供的接口 http://localhost:9001/product/1 将会轮训(此处可配置为其他)远程访问 product 服务对应的远程接口

nacos注册的服务(nacos是集群的,但由于db是同一个,所以指向哪一个节点地址查看结果都相同)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值