微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringCloudAlibaba环境搭建

在搭建之前现任一下Nacos。什么是Nacos?官方的话语就不说了,它就是一个服务发现的和管理配置的组件,跟Eureka相似,只是Eureka自己要写一个服务区成为注册中心,Nacos就是中间键,下载安装即可食用。

官方提供了Nacos的服务端供我们下载使用,我们启动Nacos后将我们的微服务注册进入Nacos即可。

下载地址:https://github.com/alibaba/nacos/releases

启动nacos:解压安装

执行bin目录下的startup命令 :startup.cmd -m standalone。我们认window下启动。

访问Nacos,端口8848:http://127.0.0.1:8848/nacos/index.html用户名和密码都是:nacos

成功登陆后

 

接下来就是搭建项目了:父子层级的创建不多说,下面是具体的层级图。我们首先做的就是把order-service服务和user-service注册到nacos中去。然后实现order-service服务调用user-service服务。在浏览器输入order-service接口的方法显示出来的是user-service的具体数据。

这里的commo-service是公共类只需要写个实体类让其他两个服务调用就行了,我们只在里面写一个实体类

/**
 * 公共的实体类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    // 名称
    private String name;
    // 描述
    private String desc;
}

springcloudalibaba-parent-0823的依赖如下:

   <!--公共的一些配置-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <!--SpringBoot-->
    <parent>
        <groupId> org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>

    <!--SpringCloud-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--这里是所有子项目都可以用的jar包-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

  user服务:

   以后所有的服务注册的主要记住三个步骤:导包,启动类,application.yml配置

导入依赖:

        <dependency>
            <groupId>com.alibaba.cloud </groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--加入WEB依赖是为了方便后面写Controller-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos的依赖,用于服务的注册与和管理配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--公共的服务-->
        <dependency>
            <groupId>com.jd</groupId>
            <artifactId>springcloudalibaba-common-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--sentinel的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

 编写启动类:

@SpringBootApplication
@EnablediscoveryClient
public class UserStart {
    public static void main(String[] args) {
        SpringApplication.run(UserStart.class,args);
    }
}

编写配置文件:在resource下新建application.yml,内容如下

server:
  port: 1010 #端口号
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #注册中心地址
  application:
    name: user-service #服务名称

做好这些之后,在启动类中启动userStart,打开nacos的页面,在服务管理 -> 服务列表你就会看user-service服务已经注册到nacos中啦!那照猫画虎,order-service的服务注册也是按照三部曲,导包、编写启动类、配置application.yml的内容也就可以注册到nacos当中啦!熟能生巧,多练几遍就是了,是不是很简单呢!

 

接下来就来点更有意思的吧,order和user都注册成功后。我们想做的是:通过在浏览器输入order的接口能显示user这边的数据,这就是两个服务之间的调用

user-service的controller层:

@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping(value = "/getById/{id}",method = RequestMethod.GET)
    public User getById(@PathVariable("id") Long id){
        return new User(1L,"刘亦菲","是美女");
    }

}

显然我们在浏览器输入http://localhost:1010/user/getById/1就能在浏览器看到我们设置的信息。

想在浏览器调用order的接口看到user的内容,一般都会使用openfegin来调用

order服务

导包:

    <!--导入openfegin-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

启动类加上@EnableFeignClients注解;

 

UserFeginServer接口:
// 启动类的@EnableFeignClients会扫描@FeignClient的这个注解,进入user-service服务
@FeignClient(value = "user-service",fallbackFactory = UserFeginServerFallback.class)
public interface UserFeginServer {
    @RequestMapping(value = "/user/getById/{id}",method = RequestMethod.GET)
    User getById(@PathVariable("id") Long id);
}
UserFeginServerFallback:这里涉及到熔断的概念,可以先不管,想用的话也可以看看。
@Component
public class UserFeginServerFallback implements FallbackFactory<UserFeginServer> {
    @Override
    public UserFeginServer create(Throwable throwable) {
        return new UserFeginServer() {
            @Override
            public User getById(Long id) {
                return new User(-1l,"熔断啦","降级啦");
            }
        };
    }
}
OrderController:
@RestController
public class OrderController {

    @Autowired
    private UserFeginServer userFeginServer;

    @RequestMapping(value = "/order/{id}",method = RequestMethod.GET)
    public User getUserById(@PathVariable("id") Long id){
        return userFeginServer.getById(id);
    }
}

这样在浏览访问order的接口就能看到user中的信息啦! 时间匆忙,写的不好指出,见谅!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐