log.info("invoked name = " + name);

    return "hello " + name;

}

}


新增配置:

应用名

spring.application.name=alibaba-nacos-discovery-server

端口

server.port=8001

Nacos服务注册中心地址

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848


启动:

INFO 25148 — [ main] o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, alibaba-nacos-discovery-server 192.168.10.211:8001 register finished


访问nacos管理页面:  

![image](https://s2.51cto.com/images/20210910/1631213043504983.jpg)

###### [](

)服务消费方

目录结构如下:

[![image](https://s2.51cto.com/images/20210910/1631213044995318.jpg)](https://s2.51cto.com/images/20210910/1631213044422374.jpg)

pom.xml依赖配置如以下:

<dependencyManagement>

<dependencies>

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-dependencies</artifactId>

        <version>Finchley.SR1</version>

        <type>pom</type>

        <scope>import</scope>

    </dependency>

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-alibaba-dependencies</artifactId>

        <version>0.2.2.RELEASE</version>

        <type>pom</type>

        <scope>import</scope>

    </dependency>

</dependencies>

</dependencyManagement>

<dependencies>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

<dependency>

    <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

    <version>1.18.2</version>

    <optional>true</optional>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-webflux</artifactId>

</dependency>

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

</dependencies>


启动类增加`@EnableDiscoveryClient`注解,开启Spring Cloud的服务注册与发现,添加`@EnableFeignClients`注解,用于controller里多种调用方式演示

@EnableDiscoveryClient

@SpringBootApplication

public class AlibabaNacosDiscoveryServerApplication {

public static void main(String[] args) {

    SpringApplication.run(AlibabaNacosDiscoveryServerApplication.class, args);

}

}


提供接口服务`TestController`,提供多种服务调用方式,分别为Feign、RestTemplate、WebClient:

@RestController

public class TestController {

@Autowired

private LoadBalancerClient loadBalancerClient;

@Autowired

private RestTemplate restTemplate;

@Autowired

private WebClient.Builder webClientBuilder;

@Autowired

private TestFeignClient client;

/* original */

@GetMapping("/test")

public String test() {

    // 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用

    ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");

    String url = serviceInstance.getUri() + "/hello?name=" + "gaohb";

    RestTemplate restTemplate = new RestTemplate();

    String result = restTemplate.getForObject(url, String.class);

    return "Invoke : " + url + ", return : " + result;

}

/* feign */

@GetMapping("/testFeign")

public String testFeign() {

    String result = client.hello("gaohb");

    return "Return : " + result;

}

/* RestTemplate */

@GetMapping("/testRestTemplate")

public String testRestTemplate() {

    String result = restTemplate.getForObject("http://alibaba-nacos-discovery-server/hello?name=gaohb", String.class);

    return "Return : " + result;

}

/* webClient */

@GetMapping("/testWebClient")

public Mono<String> testWebClient() {

    Mono<String> result = webClientBuilder.build()

            .get()

            .uri("http://alibaba-nacos-discovery-server/hello?name=gaohb")

            .retrieve()

            .bodyToMono(String.class);

    return result;

}

}


新增feign客户端`TestFeignClient`,用于声明式调用服务演示:

@FeignClient("alibaba-nacos-discovery-server")

public interface TestFeignClient {

@GetMapping("/hello")

String hello(@RequestParam(name = "name") String name);

}


另外是`RestTemplate` 和 `WebClient.Builder`注册到Spring容器,用于RestTemplate和WebClient.Builder两种服务调用方式演示

@Configuration

public class TestConfig {

@Bean

@LoadBalanced

public RestTemplate restTemplate() {

    return new RestTemplate();

}

@Bean

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

image

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!