Spring Cloud Alibaba -Nocas(1)-快速应用
一、Nocas
服务注册与发现:
分布式配置管理:
1.1、下载安装nacos服务
使用命令启动
# Windows
startup.cmd -m standalone
#windows
shutdown.cmd
管理地址:http://localhost:8848/nacos/
1.2、服务注册应用
1.2.1、父工程
pom.xml
<!--springcloud 包Greenwich-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springcloud阿里巴巴包 采用2-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
1.2.2 服务提供者(用不同ip配置多例)
1.2.2.1、pom.xml
<!--nocas依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Spring web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--图形监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
1.2.2.2、application.yml ,向nacos注册服务
server:
port: 1002
spring:
application:
name: nacos-producer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: "*"
1.2.2.3、入口类
@SpringBootApplication
@EnableDiscoveryClient
public class Producer1Application {
public static void main(String[] args) {
SpringApplication.run(Producer1Application.class, args);
}
}
1.2.2.4、服务
@RestController
public class HelloController {
@Value("${server.port}")
String port;
@GetMapping(value = "/hello")
public String hello() {
return "服务端nocas端口号:" + port;
}
}
1.2.3、服务消费者(用不同ip配置多例)
1.2.3.1、pom.xml
<!--nacos的服务注册配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Spring web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--图形监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
1.2.3.2、application.yml
server:
port: 1003
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: "*"
1.2.3.3、请求
1.2.3.3.1、RestTemplate
需要引入ribbon,注意高版本的springboot需要使用loadbalancer
<!--低版本使用ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<!-------------------------------------------------------------------->
<!--高版本使用loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.0.3</version>
</dependency>
注册一个bean
@Configuration
public class RestConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@RestController
public class HelloController {
/**
* 调用nocas上注册的服务
* 采用restTemplate+robbin的LoadBalanced注解
*
* @return
*/
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/hello")
public String hello() {
String url = "http://nacos-producer/hello";
System.out.println("进入调用");
return restTemplate.getForObject(url, String.class);
}
}
1.2.3.3.2、结合Feign请求
版本注意:需要引入openfeign;旧版本openfeign自动依赖ribbon,因此不需重复单独引入ribbon;但是在新版openfeign不再依赖ribbon,而需要单独引入loadbalancer
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.0.3</version>
</dependency>
入口开启扫描feign注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //Feign
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
FeignClient
@FeignClient("nacos-producer")
public interface HelloService {
@RequestMapping(path = "hello")
String hello();
}
Controller
@RestController
public class HelloController {
@Autowired
private HelloService helloService;
@GetMapping(value = "/helloF")
public String helloF() {
String result = helloService.hello();
return "feign消费者" + result;
}
}
1.2.3.3.3、访问
http://localhost:1003/hello
http://localhost:1003/helloF
1.3、配置中心应用
1.3.1、配置中心
在需要的项目pom.xml基础上加config依赖
<!--config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
1.3.1.1、application.yml
对应在nacos上的配置文件名
spring.application.name−{profile}.${file-extension:properties}
例如:nacos-config.dev.yaml
集群环境可以通过分命名空间namespace 、分组Group 、Service 进行配置
server:
port: 1003
spring:
application:
name: nacos-config
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
management:
endpoints:
web:
exposure:
include: "*"
1.3.1.2、在nacos添加配置
1.3.1.3、controller
注意:在配置文件是什么风格写的这里也要对应
例如:用yaml 是用冒号:连接的,而properties是用点.连接的
@RestController
@RefreshScope //update config
public class ConfigController {
@Value("${test:value}")
private String configValue;
@NacosValue(value = "${test.value:1}", autoRefreshed = true)
public String getValue(){
return configValue;
}
}