如何搭建Spring Cloud Alibaba微服务架构(简单版)
Spring Cloud Alibaba 是一个专门为构建基于Spring Cloud的分布式应用而设计的组件套件,它提供了与阿里巴巴云服务无缝集成的功能。随着微服务架构的普及,企业对于高效、可靠的分布式服务治理需求日益增长。Spring Cloud Alibaba 提供了包括服务注册与发现、配置管理、服务网关、Feign客户端等在内的丰富功能,能够帮助开发者快速构建和管理复杂的微服务系统,本篇介绍如何搭建一个简单的Spring Cloud Alibaba微服务。
一、创建父工程
4.0.0 org.springframework.boot spring-boot-starter-parent 2.6.4 com.master spring-cloud-master 1.0.0 8 8 2021.0.1 2021.0.1.0 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import org.springframework.boot spring-boot-maven-plugin
二、集成Nacos
启动nacos
父工程的pom.xml添加nacos的依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery ${spring-cloud-alibaba.version}
刷新maven
创建application.yml文件
server: port: 9091 servlet: context-path: /api/user spring: application: name: spring-user-service cloud: nacos: discovery: server-addr: localhost:8848
内容如下:
package com.spring; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class SpringUserApplication { public static void main(String[] args) { SpringApplication.run(SpringUserApplication.class, args); } }
打开springboot服务管理
启动服务,可以看到已经启动,后面是端口号(在该服务下的application.yml文件里配置)
打开http://localhost:8848/nacos可以看到服务启动
创建接口
package com.spring.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 用户接口 */ @RestController @RequestMapping("/user") public class UserController { @RequestMapping("/test") public String test() { return "测试接口调用"; } }
浏览器访问:
localhost:9091/api/user/user/test
调用成功
三、集成OpenFeign
父工程引入依赖
org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-loadbalancer 3.1.1
和user服务一样在创建一个服务,我这里为note服务
并且创建一个通用common服务
application.yml为
server: port: 9092 servlet: context-path: /api/note spring: application: name: spring-note-service cloud: nacos: discovery: server-addr: localhost:8848
俩个子服务引入common服务的依赖
在note和user服务的启动类加注解(括号中的是注解扫描的路径,feign接口要在这个路径下)
@EnableFeignClients("com.spring")
创建fegin接口
内容如下:value为服务名(在application.yml中配置),path为路径前缀yml文件中配置的,下面的接口对应相应路径的接口
package com.spring.common.feignClient; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @FeignClient(value = "spring-user-service",path = "api/user") public interface UserFeign { @PostMapping("/user/test") String test(); }
然后在note服务测试能否调用user接口
package com.spring.note.controller; import com.spring.common.feignClient.UserFeign; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 笔记接口 */ @RestController @RequestMapping("/note") public class NoteController { @Autowired private UserFeign userFeign; @RequestMapping("/test") public String test() { return "note服务测试接口调用"; } @RequestMapping("/feignTest") public String feignTest() { String feign = userFeign.test(); return "note服务测试feign接口调用:"+feign ; } }
浏览器访问:
localhost:9092/api/note/note/feignTest
这样就成功了
四、集成Gateway
创建一个Gateway服务
启动类:
package com.spring; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; @EnableFeignClients("com.spring") @SpringBootApplication @EnableDiscoveryClient public class SpringGatewayApplication { public static void main(String[] args) { SpringApplication.run(SpringGatewayApplication.class, args); } }
application.yml
server: port: 9090 spring: application: name: spring-gateway-service main: web-application-type: reactive cloud: nacos: discovery: server-addr: localhost:8848 gateway: routes: - id: spring-user-service uri: lb://spring-user-service predicates: - Path=/api/user/** - id: spring-note-service uri: lb://spring-note-service predicates: - Path=/api/note/**
pom.xml加入依赖
org.common spring-common 1.0.0 org.springframework.cloud spring-cloud-starter-gateway org.springframework.boot spring-boot-starter-web * *
刷新Maven,启动所有服务,浏览器访问
localhost:9090/api/note/note/feignTest
这就成功了