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中的信息啦! 时间匆忙,写的不好指出,见谅!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值