搭建项目过程中遇到的问题:
1、bootstrap.yml配置文件不生效
解决方案为步骤6
2、UnknownHostException: xxx @LoadBalanced注解失效 Nacos中无法通过服务名调用
解决方案为步骤2
说明:启动nacos后创建两个springboot项目,一个goods项目一个order项目
下面以order项目为例贴出关键代码及依赖
1、springboot版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!-- 注意版本号 -->
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
2、spring-cloud-starter-loadbalancer版本
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.0.3</version>
</dependency>
3、引入的discovery
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4、alibaba-dependencies依赖管理
<dependencyManagement>
<dependencies>
<dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies -->
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
5、客户端springboot类代码
@SpringBootApplication
@EnableDiscoveryClient
public class NacosOrderApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosOrderApplication.class, args);
}
}
6、yaml配置,注意:此处使用bootstrap.yml而不是application.yml,所以需要在pom文件中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.1</version>
</dependency>
server:
# goods项目使用6011
port: 6010
spring:
application:
# goods项目使用goods
name: order
cloud:
nacos:
discovery:
server-addr: localhost:8848
register-enabled: true
7、写一个controller
@RestController
public class OrderController {
@Autowired
public RestTemplate restTemplate;
@GetMapping("getOrder")
public String getOrder() {
// goods中的controller这里不在详述spring.application.name设置为goods即可Nacos会做代理
return "订单中有商品:"+ restTemplate.getForObject("http://goods/getGoods", String.class);
}
}
goods项目采用一样的配置即可
暂时写到这里,后面补充