赞
踩
参考官方快速开始教程写的,主要注意引用的包是否正确。
这里是用的2022.0.0.0-RC2版本的springCloud,所以需要安装jdk21,参考上一个文章自行安装。
将nacos-config和服务提供者、消费消费者整合起来就是一个完整的分布式项目了。
nacos-discovery-provider-example
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.0.13</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </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>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- <version>2022.0.0.0-RC2</version>
- </dependency>
- </dependencies>
application.properties
如果nacos没有开启鉴权,则不需要配置账号密码
spring.cloud.nacos.discovery.namespace=local是用来做多环境配置的(本地、开发、测试、生产),此处可以不配置,添加到启动参数里面。
- spring.application.name=service-provider
- spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- spring.cloud.nacos.discovery.username=nacos
- spring.cloud.nacos.discovery.password=nacos
- spring.cloud.nacos.discovery.namespace=local
- server.port=18082
- @SpringBootApplication
- @EnableDiscoveryClient
- public class NacosDiscoveryProviderExampleApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(NacosDiscoveryProviderExampleApplication.class, args);
- }
-
- }
- @RestController
- public class EchoController {
- @GetMapping(value = "/echo/{string}")
- public String echo(@PathVariable String string) {
- return string;
- }
- }
可以添加-Dspring.cloud.nacos.config.namespace=local参数指定启动的环境
查看服务列表,显示服务已经注册成功。
nacos-discovery-consumer-example
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.0.13</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </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>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-loadbalancer</artifactId>
- <version>4.0.5</version>
- </dependency>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- <version>2022.0.0.0-RC2</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-openfeign</artifactId>
- <version>4.0.6</version>
- </dependency>
-
- </dependencies>
application.properties
如果nacos没有开启鉴权,则不需要配置账号密码
spring.cloud.nacos.discovery.namespace=local是用来做多环境配置的(本地、开发、测试、生产),此处可以不配置,添加到启动参数里面。
- spring.application.name=service-consumer
- server.port=18083
- spring.cloud.nacos.discovery.username=nacos
- spring.cloud.nacos.discovery.password=nacos
- spring.cloud.nacos.discovery.namespace=local
- spring.cloud.loadbalancer.ribbon.enabled=false
- spring.cloud.loadbalancer.nacos.enabled=true
- @SpringBootApplication
- @EnableFeignClients
- @EnableDiscoveryClient
- public class NacosDiscoveryConsumerExampleApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(NacosDiscoveryConsumerExampleApplication.class, args);
- }
- }
- @FeignClient(name = "service-provider")
- public interface EchoService {
- @GetMapping(value = "/echo/{str}")
- String echo(@PathVariable("str") String str);
- }
- @Configuration
- public class BeanInit {
- @Bean
- @LoadBalanced
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
- }
这里的rest和feign是接口的两种调用方式。
rest直接通过服务名和url,使用http的方式调用。
feign使用service封装服务,然后以service的方式调用服务。
我们自己在生产中使用的rest的方式调用。
- @RestController
- public class TestController {
-
- @Autowired
- private RestTemplate restTemplate;
- @Autowired
- private EchoService echoService;
-
- @GetMapping(value = "/echo-rest/{str}")
- public String rest(@PathVariable String str) {
- return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
- }
- @GetMapping(value = "/echo-feign/{str}")
- public String feign(@PathVariable String str) {
- return echoService.echo(str);
- }
- }
可以添加-Dspring.cloud.nacos.config.namespace=local参数指定启动的环境
http://localhost:18083/echo-rest/abcede
http://localhost:18083/echo-feign/abcd
看了下官方的demo,直接使用的话有很多jar包缺失或者版本号没有指明。
可以参考他的demo代码。比较全。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。