spring-cloud-alibaba study
spring-cloud-alibaba是spring-cloud规范的另一种实现,提供了注册服务与配置服务二合一的Nacos,提供熔断降级与系统保护的Sentinel.
unzip nacos-server-0.4.0.zip
cd nacos/bin
依赖包:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.0.RELEASE</version>
</dependency>
配置地址(bootstrap.properties):
spring.cloud.nacos.discovery.server-addr=10.3.10.131:8848
开启配置:
@EnableDiscoveryClient
@SpringBootApplication
public class BookApplication {
public static void main(String[] args) {
SpringApplication.run(BookApplication.class, args);
}
}
编写feign接口:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
调用:
@FeignClient("book-serv")
public interface BookService {
@GetMapping("/book/{bookName}")
Result<Book> book(@PathVariable(name = "bookName") String bookName);
}
@Autowired
private BookService bookService;
@PostMapping("/order")
public Result order(@RequestBody Order order) {
Result<Book> result = bookService.book(order.getBookName());
Book book = result.getData();
System.out.println(book);
double money = order.getCount() * book.getPrice();
order.setTotalMoney(money);
System.out.println(order);
return Result.builder().success(true).msg("ok").build();
}
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.0.RELEASE</version>
</dependency>
配置地址(bootstrap.properties):
spring.cloud.nacos.config.server-addr=10.3.10.131:8848
注入配置:
@RefreshScope //用来刷新配置
@RestController
public class BookController {
@Value("${price}") //注入配置
private Double price;
@PostMapping("/bookAdd")
public Result bookAdd(@RequestBody Book book) {
System.out.println(book.toString());
return Result.builder().success(true).msg("ok").build();
}
@GetMapping("/book/{bookName}")
public Result<Book> book(@PathVariable(name = "bookName") String bookName) {
Book book = Book.builder().bookName(bookName).author("海明威").price(price).build();
return Result.<Book>builder().success(true).msg("ok").data(book).build();
}
}
注意:需要在nacos控制台添加配置,dataid=${spring.application.name}.properties
配置dashboard地址:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>