Springcloud微服务注册实例演示

本文介绍了Springcloud微服务架构的基本概念,包括服务拆分、负载均衡、服务注册中心等核心功能。并展示了如何创建SPRINGCLOUD_EUREKASERVER、SPRINGCLOUD_USERSERVICE和SPRINGCLOUD_USERUI三个模块,详细讲解了每个模块的配置和代码实现,最后通过运行和效果展示来验证微服务的正常工作。
摘要由CSDN通过智能技术生成

Springcloud微服务操作<一>

一:微服务简介(Microservice)

微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯。它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩。

微服务架构需要的功能或使用场景:

1:我们把整个系统根据业务拆分成几个子系统。

2:每个子系统可以部署多个应用,多个应用之间使用负载均衡。

3:需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。

4:所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判断一个URL请求由哪个服务处理。请求转发到服务上的时候也使用负载均衡。

5:服务之间有时候也需要相互访问。例如有一个用户模块,其他服务在处理一些业务的时候,要获取用户服务的用户数据。

6:需要一个断路器,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。

7:还需要一个监控功能,监控每个服务调用花费的时间等。

目前主流的微服务框架:Dubbo、 SpringCloud、thrift、Hessian等



一:微服务简介(Microservice)

一.架构

1.创建一个SPRINGCLOUD项目
在这里插入图片描述


2.添加依赖:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.17.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3.创建模块:
        SPRINGCLOUD_EUREKASERVER  (注册中心)
        SPRINGCLOUD_USERSERVICE  (微服务)
        SPRINGCLOUD_USERUI  (客户端)



二.模块代码

1.SPRINGCLOUD_EUREKASERVER模块

在这里插入图片描述

首先在pom.xml导入依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
</dependencies>

EurekaServer.java:

@SpringBootApplication
//开启Eureka Server
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaServer.class).web(true).run(args);
    }
}

解释:
          @EnableEurekaServer注解:是启用eureka的服务
          @SpringBootApplication注解:
                    主要有3个注解:
                           1.@ComponentScan:这个主要有2个作用,组件扫描和自动装配;
                           2.@SpringBootConfiguration:这个注解主要是继承@Configuration注解,这个我们就是为了加载配置文件用
                           3.@EnableAutoConfiguration:自动生成spring的配置文件


application.yml资源文件:

#指定端口,默认是8761,不要改变
server:
    port: 8761
eureka:
 instance:
 #将来注册到注册中心的微服务包括注册中心都是用ip地址
    prefer-ip-address: true
    hostname: localhost
 client:
 #是否注册到注册中心 (注册中心自己不需要注册)
    register-with-eureka: false
 #是否抓取注册中的注册信息
    fetch-registry: false
 #微服务和客户端用来注册和发现的地址
    service-url:
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

运行main方法,再进入浏览器查询:http://localhost:8761/




2.SPRINGCLOUD_USERSERVICE模块
在这里插入图片描述
首先在pom.xml导入依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

UserService.java:

@SpringBootApplication
// 启用eureka的客户端
@EnableEurekaClient
public class UserService {
        public static void main(String[] args) {
            new SpringApplicationBuilder(UserService.class).web(true).run(args);
        }

}

application.yml资源文件:

server:
  port: 8881

#给微服务设置一个名字
spring:
  application:
    name: userservice
#连接数据库
  datasource:
    url: jdbc:mysql://localhost/mysql
    username: root
    password: ps123456
    driver-class-name: com.mysql.jdbc.Driver

eureka:
  instance:
    prefer-ip-address: true
    hostname: localhost
  client:
    register-with-eureka: true
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8761/eureka/

mapper包下的 UserMapper.java:

// 根据账户和密码查询mysql数据库中user表的信息
@Mapper
public interface UserMapper {
    @Select("select * from user where user=#{userName} and authentication_string=password(#{password})")
    public List<User> queryUser(@Param("userName") String userName, @Param("password")String password);
}

entity包下的User.java实体类:

@Data
@NoArgsConstructor
public class User {
    private String userName;
    private String password;
}

解释:
          1.@Data注解:生成属性的set,get方法
          2.@NoArgsConstructor注解:生成构造方法




entity包下的Result.java 实体类:

// 要返回的实体类
@Data
@NoArgsConstructor
public class Result {
    private int code;
    private String msg;
    private List data;
}

controller包下的UserController.java:

@RestController
public class UserController {
@Autowired
UserMapper usermapper;

@PostMapping("/validateUser")
public Result validateUser(@RequestBody User user){
    List&lt;User&gt; maps = usermapper.queryUser(user.getUserName(), user.getPassword());
    // 将获得的数据经过逻辑验证返回给界面微服务的控制层
    Result re = new Result();
    if(maps.size()&gt;0){
        re.setCode(1);
        re.setMsg("请输入正确的用户名和密码");
    }
    return re;
}

解释:
          1.@RestController的作用就相当于@Controller+@ResponseBody的结合体
                    --@Controller:扫描控制层
                    --@ResponseBody:表示返回的类型是个JSON数据
          2.@RestController: 接收客户端传来的数据




3.SPRINGCLOUD_USERUI模块
在这里插入图片描述
首先在pom.xml导入依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>
</dependencies>

application.yml资源文件:

#界面一般是80端口
server:
  port: 80

#给登录微服务设置一个名字
spring:
  application:
    name: userui

eureka:
  instance:
    prefer-ip-address: true
    hostname: localhost
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka/

com.ps包下的UserUi.java:

@SpringBootApplication
// 启用eureka的客户端
@EnableEurekaClient
public class UserUi {
    @Bean
    // 支持负载均衡功能
    @LoadBalanced
    public RestTemplate restTemplate(){
            return new RestTemplate();
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(UserUi.class).web(true).run(args);
    }

entity包下的User.java:

@Data
@NoArgsConstructor
public class User {
    private String userName;
    private String password;

Result.java:

@Data
@NoArgsConstructor
public class Result {
    private int code;
    private String msg;
    private List data;
}

controller包下的UserController.java:

@Controller
public class UserController {
@Autowired
RestTemplate restTemplate;

@PostMapping("/rlogin")
public String rlogin(User user){
    // 需要调用userservice这个微服务,注册中心里面服务名是大写
    // validateUser:指要转跳的微服务的控制层的路径
    String url = "http://USERSERVICE/validateUser";
    // user:将user获取的数据传到微服务
    // Result.class:指微服务返回的类型
    ResponseEntity&lt;Result&gt; objectResponseEntity = restTemplate.postForEntity(url,user ,Result.class);
    Result body = objectResponseEntity.getBody();
    // 当重微服务得到的Result对象的数据中code属性是1时表示,登录成功
    if(body.getCode()==1){
        return "redirect:/suc.html";
    }else{
        return "redirect:/login.html";
    }
}

解释:@Controller:指定返回的html界面,必须是重定向转跳


login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
	<!--这里是登录界面-->
    <form method="post" action="rlogin">
        <label>用户名</label>
        <input name="userName"/><br>
        <label>密&nbsp;&nbsp;码</label>
        <input name="password"/><br>
        <input type="submit" value="登录"/>
    </form>
</body>
</html>

suc.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
   	<!--登录成功展示-->
    登录成功
</body>
</html>




三.效果展示

1.依次运行SPRINGCLOUD_EUREKASERVER(注册中心),SPRINGCLOUD_USERSERVICE(微服务),SPRINGCLOUD_USERUI(客户端)
2.去注册中心查看微服务:http://localhost:8761/

在这里插入图片描述
浏览登录界面:
在这里插入图片描述
输入账户和密码登录后:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值