1. 程式人生 > >SpringCloud微服務大綱 01(idea篇)

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表單提交,一個就提示一句登入成功就好啦