SpringCloud微服务大纲 01(idea篇)

微服务的概念?

将all in one 和 soa 框架的缺点都弥补了的框架结构
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
服务间可以通过“轻量级设备与HTTP型API进行沟通”
服务之间可以通过注册中心来注册和发现

微服务框架对比!

consul:是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单
etcd:是一个高可用的键值存储系统 由CoreOS开发并维护的, 主要用于共享配置和服务发现
dubbo:是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。提供中文文档,更新不稳定
Springcloud:是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

服务发现

微服务的核心灵魂

springcloud组件

实现简单的用户微服务案例(zookepper,consul,eureka【默认】)

在这里插入图片描述

首先用idea新建一个maven项目
关联依赖 注意这里容易出现版本冲突问题,版本要先选好

<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>Edgware.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

控制中心模块创建

依赖管理

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

main方法

@SpringBootApplication
@EnableEurekaServer
public class Application {

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

}

资源source建议写application.yml .,层次结构要分明:后面加个空格

server:
  port: 8761

eureka:
  instance:
  	#将来注册到该注册中心的微服务包括注册中心都是用IP地址
    preferIpAddress: true
    hostname: localhost
  client:
 	 #是否注册到注册中心,注册中心不需要自己注册
    registerWithEureka: false
     #是否从注册中心抓取注册信息,自己不需要抓取
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

然后可以运行,输入localhost:8761进入微服务控制中心
在这里插入图片描述
成功进入页面

微服务用户创建

@SpringBootApplication
@EnableEurekaClient
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

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

}

配置文件application.yml

server:
  port: 8881
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    #不要出现下划线
    name: userservice
  datasource:
    url: jdbc:mysql://localhost/unit02
    username: root
    password: ps123456
    driver-class-name: com.mysql.jdbc.Driver

pom.xml 依赖管理

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</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>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

在这里插入图片描述

根据架构写一个用户登录的service层

先看controller层

@RestController
public class UserController {

    @Autowired
    UserMapper userMapper;

    @PostMapping("/validataUser")
    public Result validataUser(@RequestBody  User user){
        List<User> query = userMapper.query(user.getUsername(), user.getPassword());
        Result result=new Result();
        System.out.println(query.size());
        if(query.size()>0){
            result.setCode(1);
            result.setMsg("请输入正确的账号和密码");
        }
        return result;
    }

}

结果集实现,这里的实现统一用了lombok小辣椒配件
idea的安装流程https://mp.csdn.net/mdeditor/84666851#

@Data
@NoArgsConstructor
public class Result {

    private int code;

    private String msg;

    private List data;

}
实体类user
```java
@Data
@NoArgsConstructor
public class User {

    private String username;

    private String password;

}

mapper接口映射

@Mapper
public interface UserMapper {

    @Select("select * from user where username=#{username} and password=#{password}")
    public List<User> query(@Param("username") String userName, @Param("password") String password);

}

然后在进入控制中心
在这里插入图片描述
这样一个微服务就创建成功啦

在创建一个视图层的微服务登录, 仅做参考
流程和上面的微服务差不多
这里的entity复制过来就好
在这里插入图片描述

@Controller
public class UserController {

    @Autowired
    RestTemplate restTemplate;

    @RequestMapping(value="/rlogin",method=RequestMethod.POST)
    public String rlogin(User user){
        String url="http://USERSERVICE/validataUser";
        ResponseEntity<Result> resultResponseEntity = restTemplate.postForEntity(url, user, Result.class);
        Result body = resultResponseEntity.getBody();
        System.out.println(body.getCode());
        return  body.getCode()==1 ? "redirect:/suc.html" : "redirect:/login.html";
    }

}

在这里插入图片描述
发现什么不一样了吗?对的,不需要webapp这个文件了,所有的html文件一定要放在这里,包名可以选择用static或者public,建议用static,不然会扫描不到哦
application.yml

server:
    #建议用80端口,我这是占用了,就随便取了一个
    port: 8889
    eureka:
      instance:
        #将来注册到该注册中心的微服务包括注册中心都是用IP地址
        preferIpAddress: true
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
        #是否注册到注册中心,注册中心不需要自己注册
        registerWithEureka: true
        #是否从注册中心抓取注册信息,自己不需要抓取
        fetchRegistry: true
    spring:
      application:
    #不要出现下划线
    name: userview

两个html就不写了,一个就写个form表单提交,一个就提示一句登录成功就好啦

猜你喜欢

转载自blog.csdn.net/weixin_43458790/article/details/84638497
今日推荐