文章博主个人编写,内容部分查阅资料,如有侵权联系博主
前言
在使用seata解决分布式事务的时候,因为需求需要一个springcloud的微服务的项目,本来有网上的资料。但是本人坚持自律,所以坚持自己搭建了一个微服务的项目。搭建了数个小时,再加上最近过年制备年货导致博主花了两三天的时间才完成搭建,同时将发现的错误和注意事项进行总结
一、搭建前的准备
在搭建之前一定要选择好依赖和依赖的版本,博主因为版本的不对应导致了很多奇奇怪怪的问题,如果依赖的版本不对应会出现很多不兼容的报错,网上一般很难找到解决问题的方法,所以开始架构的选择很重要很重要!!!!!!
二、创建父工程
1.新建maven项目Trade-demo
pom文件引入依赖如下(示例):
<dependencyManagement>
<dependencies>
<!--alibaba的包管理器-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springCloud的包管理器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springBoot的启动器的包管理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.5</version>
</plugin>
</plugins>
</build>
在进行新建项目(New Project)的时候,创建父工程可以选择创建maven项目或者springboot项目,这个时候可能大家会有疑问创建maven和springboot项目有啥区别吗? 个人理解创建的时候无论选择的是maven还是springboot大体上是相同的,我觉得如果你选择的是maven更像是创建了一个“纯净的骨架”,可以自己在pom文件中进行配置,而如果是springboot项目则可以在创建的时候选择依赖,创建后直接自动下载引入。在引入依赖的时候个人建议查阅官方的毕业版本!!!!!!!!!选择好依赖和依赖版本之间的对应关系!!!!!!!!!!创建项目之前
二、创建子工程生产者
1.创建maven项目Order-service
pom文件引入依赖如下(示例):
<dependencies>
<!--springboot启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--alibaba的服务发现,注意一定要是alibaba包下的-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<!--springboot web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--服务之间的调用 openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
2.配置application.yml文件
在src的下main文件夹下的rescources中创建配置文application.yml文件,配置文件内容如下(示例):
server:
port: 8886 #启动端口
spring:
application:
name: order-service #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos注册中心地址
3.创建请求类TestController
在Order-service项目中创建包controller,创建类TestControoler,类内容如下
@RestController
public class TestController {
@GetMapping("/order")
public String testcontroller(){
System.out.println("order-service服务启动");
return "order-service服务启动成功";
}
}
4.创建启动类OrderServiceApplication
在根包下创建启动类内容如下(示例):
@SpringBootApplication
//nacos发现服务
@EnableDiscoveryClient
//开启Feign远程调用
@EnableFeignClients
public class OrderServiceApplication {
public static void main(String[] args){
SpringApplication.run(OrderServiceApplication.class,args);
}
}
注意根包下创建启动类,这样可以防止启动类的包扫描的问题,启动类进行包扫描的时候默认扫描的是当前包和其所在子包进行Bean的扫描。所以在根包下创建,同时在以后的代码扩展时也可以避免因包扫描而产生报错
三、创建子工程消费者
1.创建maven项目Account-service
pom文件引入依赖如下(示例):
<dependencies>
<!--springboot启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--alibaba的服务发现,注意一定要是alibaba包下的-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
<version>2.2.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--springboot web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--服务之间的调用 openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
2.配置application.yml文件
在src的下main文件夹下的rescources中创建配置文application.yml文件,配置文件内容如下(示例):
server:
port: 8887 #启动端口
spring:
application:
name: account-service #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #注册中心地址,nacos服务
3.编写FeignClient客户端接口
创建接口类ProvideClient,通过注解@FeignClient的value值来匹配子服务配置文件中的服务名,来进行引入。特别注意的是接口中方法的请求名和方法名,方法返回值要跟引入服务的方法相同
接口ProvideClient代码(示例):
@FeignClient(value = "order-service")
public interface ProvideClient {
@GetMapping("/order")
String testcontroller();
}
4.创建请求类TestController
在Account-service项目中创建包controller,创建类TestControoler,类内容如下
@RestController
public class TestController {
@Autowired
ProvideClient provideClient;
@GetMapping("/test2offer")
public String testcontroller(){
System.out.println("account-service服务启动成功");
String result = provideClient.testcontroller();
return "account-service服务启动成功======="+result;
}
}
5.创建启动类AccountServiceApplication
在根包下创建启动类内容如下(示例):
@SpringBootApplication
//nacos发现服务
@EnableDiscoveryClient
//开启Feign远程调用
@EnableFeignClients
public class AccountServiceApplication {
public static void main(String[] args){
SpringApplication.run(AccountServiceApplication.class,args);
}
}
四、启动测试
安装nacos后进入bin目录,使用cmd在dos中输入Startup.cmd -m standalone,启动nacos,并在l浏览器访问:localhost:8848,在服务列表发现服务
启动服务,在浏览器访问:localhost:8887/test2offer显示正确的访问结果即成功
五、注意事项与报错问题
1.个人搭建时候遇到的报错问题:
(1)Error creating bean with name 'configurationPropertiesBeans' defined in class path resource
问题原因: nacos与springboot版本不一致
解决方案:更改pom文件中nacos和springboot的依赖的版本
(2)Your project setup is incompatible with our requirements due to following reasons:
- Spring Boot [3.2.2] is not compatible with this Spring Cloud release train
问题原因:springboot和springcloud版本对应问题
解决方案:更改pom文件中的springboot和springcloud的依赖的版本
(3)Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
问题原因:数据库未连接
解决方案:检查配置文件数据库连接配置
2.注意事项
(1)在创建项目时候会发现在父工程中,父工程规定了一个大体的框架,个人理解就是查阅文档①com.alibaba.cloud(alibaba的依赖)、②org.springframework.cloud(springcloud依赖)、③org.springframework.boot(springboot依赖),也就是需要查阅好alibaba和springboot和springcloud的版本对应,推荐毕业版本。之后在子工程如果需要nacos或者openfeign等依赖再在子工程pom中进行引入依赖。
六、总结
大家在个人编写的时候肯定会遇到各种各样的问题,希望大家不要灰心,努力!加油!我有的时候写代码会花费很长很长的时间,但是有的时候我会觉得,怎么说呢其实也是一种享受,在完成了代码之后看着自己完成的东西会觉得很有趣。(*^▽^*) (*^▽^*) (*^▽^*)
总之希望本文对大家有所帮助,希望大家点个赞,好了今天的学习到此结束,大家努力、加油!!
最后祝大家新年快乐,心想事成,万事如意,学业有成。