springcloud分布式微服务项目搭建

文章博主个人编写,内容部分查阅资料,如有侵权联系博主

前言

  在使用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中进行引入依赖。

六、总结

  大家在个人编写的时候肯定会遇到各种各样的问题,希望大家不要灰心,努力!加油!我有的时候写代码会花费很长很长的时间,但是有的时候我会觉得,怎么说呢其实也是一种享受,在完成了代码之后看着自己完成的东西会觉得很有趣。(*^▽^*) (*^▽^*) (*^▽^*)

  总之希望本文对大家有所帮助,希望大家点个赞,好了今天的学习到此结束,大家努力、加油!!

最后祝大家新年快乐,心想事成,万事如意,学业有成。

  


 

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

载着梦想的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值