springcloud 實現簡單的 消費者和生產者 模式(Restfule 的風格)


一、springcloud 實現簡單的 消費者和生產者 模式(Restfule 的風格)

    1.實現簡單的消費者和生產者
        springcloud使用的http協議進行傳輸數據,也就是說springcloud仍然使用的是RESTFUL的風格

        1.1.搭建工程(!!!springboot的項目是否需要運行都打jar包!!!(springboot工程中不需要war包))
            搭建一個總的父級工程
                20190926-springcloud-parent(pom):只做jar包的管理        把SRC 目錄干掉
                
//    問題一、pom是啥?
              <packaging>pom</packaging>
            POM是最簡單的打包類型。它生成的構件只是它本身。    
            pom 項目里沒有java代碼,也不執行任何代碼,只是為了聚合工程或傳遞依賴用的。

//    問題二、jar和war和pom的區別    ?    
/*
    pom是maven依賴文件
    jar是java普通項目打包
    war是java web項目打包 
*/

在總的父級項目(20190926-springcloud-parent)下有新建三個子級項目。    把這三個項目的 SRC 目錄干掉,因為他們都是父級項目。不須要。
                                                20190926-springcloud-management
                                                20190926-springcloud-provider-management
                                                20190926-springcloud-consumer-management
                                        

 

 

 

 

二、    1.搭建常規工程        
    
            1.1    20190926-springcloud-management(pom):只做jar包的管理   
                    --20190926-springcloud-model(jar)
                    --20190926-springcloud-mapper(jar)--->依賴於model
                    --20190926-springcloud-service(jar)--->依賴於mapper
                        @Service:是spring框架所提供的

            1.2搭建服務生產者工程       依賴於service
                20190926-springcloud-provider-management(pom):只做jar包的管理
                    20190926-springcloud-provider-8081(jar):需要提供數據,
                    也就是說必須要連接數據庫,對數據庫做增刪改查(springboot-web-starter,mysql驅動包,mybatis包,druid包...)--->依賴於service

            1.3搭建服務消費者工程         consumer 消費者 依賴於model 
                20190926-springcloud-consumer-management(pom):只做jar包的管理
                    20190926-springcloud-consumer-6081(jar):只需要和客戶端打交道(只需要頁面),
                    不再需要數據的支持,所有的數據來源都來源於provider--->依賴於model

 

三、jar包管理,如何添加jar包?

  1.最高級的jar包 20190926-springcloud-parent

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.aaa</groupId>
    <artifactId>20190927-springcloud-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>202190927-springcloud-management</module>
        <module>20190927-springcloud-provider-management</module>
        <module>20190927-springcloud-consumer-management</module>
    </modules>

    <packaging>pom</packaging>

    <!--
     項目jar包的構建:
         之前使用的parent標簽直接引入項目中,可以繼承父項目的jar包
         但是項目中已經使用到了springcloud和springboot
         springcloud和springboot需要些兩個parent,但是在pom工程中不能這樣實現
         所以直接引入springboot和springcloud的jar包工程,並且使用dependencyManagement標簽進行管理,用到了什么jar包直接重寫

         springboot-parent, springcloud-parent的父級工程都是dependencies
 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.8.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-server</artifactId>
                <version>2.11.8</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-slf4j-impl</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-autoconfigure-ui</artifactId>
                <version>2.11.8</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.0.4</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.31</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>


</project>

 

2.   20190926-springcloud-consumer-management  消費者的父級架構。

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>20190927-springcloud-parent</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-consumer-management</artifactId>

    <packaging>pom</packaging>
    <modules>
        <module>20190927-springcloud-consumer-6081</module>
    </modules>

</project>

 

2.1  子級架構      20190926-springcloud-consumer-6081?---------依賴於model

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>20190927-springcloud-consumer-management</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-consumer-6081</artifactId>

<!--
    消費者 依賴於 model  和頁面交互
-->

    <dependencies>
        <dependency>
            <groupId>com.aaa</groupId>
            <artifactId>20190927-springcloud-model</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--
    微服務,將  spring-boot-starter-web添加進來

    需要修改默認的端口號。
 -->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


    </dependencies>




</project>

 

 

 

 

 

3.  20190926-springcloud-provider-management 生產者

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>20190927-springcloud-parent</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-provider-management</artifactId>

    <packaging>pom</packaging>
    <modules>
        <module>20190927-springcloud-provider-8081</module>
    </modules>

</project>

 

 

3.1  子級架構  20190926-springcloud-provider-8081?---------依賴於service

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>20190927-springcloud-provider-management</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-provider-8081</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.aaa</groupId>
            <artifactId>20190927-springcloud-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


</project>

 

 

 

 

 

4.   20190926-springcloud-management(pom) 。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>20190927-springcloud-parent</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>202190927-springcloud-management</artifactId>
<!--

    pom  做jar包的管理。
-->
    <packaging>pom</packaging>
    <modules>
        <module>20190927-springcloud-model</module>
        <module>20190927-springcloud-mapper</module>
        <module>20190927-springcloud-service</module>
    </modules>


</project>

 

 

 

4.1 mapper 項目的jar包管理。------------依賴於 model。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>202190927-springcloud-management</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-mapper</artifactId>


    <dependencies>
        <dependency>
            <groupId>com.aaa</groupId>
            <artifactId>20190927-springcloud-model</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--
           需要引入mysql mybatis springboot druid
       -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

 

 

4.2 service項目?-------------依賴於 mapper

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>202190927-springcloud-management</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-service</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.aaa</groupId>
            <artifactId>20190927-springcloud-mapper</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


</project>

 

 

4.3 model?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>202190927-springcloud-management</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-model</artifactId>


</project>

 

 四、創建config 包,添加配置文件?

4.1  消費者consumer 的配置?

  

 

 

4.2 生產者provider 的配置?

  

 

 

五、實現Restfule的風格,消費者的controller  調用生產者的controller

5.1  model

package com.aaa.zxf.model;

import java.io.Serializable;

public class User implements Serializable {
    private  long id;
    private  String name;
    private  long age;

    public User() {
    }

    public User(long id, String name, long age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getAge() {
        return age;
    }

    public void setAge(long age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (id != user.id) return false;
        if (age != user.age) return false;
        return name != null ? name.equals(user.name) : user.name == null;

    }

    @Override
    public int hashCode() {
        int result = (int) (id ^ (id >>> 32));
        result = 31 * result + (name != null ? name.hashCode() : 0);
        result = 31 * result + (int) (age ^ (age >>> 32));
        return result;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

5.2   mapper

package com.aaa.zxf.mapper;

import com.aaa.zxf.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {

    //  利用注解的方式 ,查詢數據庫
    @Select("select id,name,age from user")
    List<User> selectAll();

}

 

5.3   service

package com.aaa.zxf.service;

import com.aaa.zxf.mapper.UserMapper;
import com.aaa.zxf.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService  {

    @Autowired
    private UserMapper userMapper;

    public List<User> selectAllUsers() {
        return userMapper.selectAll();
    }


}

 

 

5.4   provider的controller

package com.aaa.zxf.controller;
import com.aaa.zxf.model.User;
import com.aaa.zxf.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;



@RestController
public class UserController {

    // 注入依賴
    @Autowired
    private UserService userService;


    /**
     * 獲得所有的用戶信息。
     * @return
     */
    @RequestMapping("/userAll")
    public List<User> selectAllUsers()
    {
        System.out.println("8081");
        return userService.selectAllUsers();
    }



}

  

   

  Restful的具體的實現,consumer 的controller。

package com.aaa.zxf.controller;


import com.aaa.zxf.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    /**
     *調用 service ,consumer項目的controller 調用的是 provider項目的controller (遵循 http 協議)
     *
     * 模擬http協議,就可以實現,兩個controller之間的調用。
     *
     * getForObject: 使用get 請求方式, 該方法有兩個參數。
     *
     * 1. URL 請求的路徑 localhost:8081/userAll
     * 2. 規定的返回值類型
     *
     注意! 將provider 和 consumer 兩者之間的 RequestMapping 的路徑 ,保持一致!!! *
@return */ @RequestMapping("/userAll") public List<User> selectAllUsers() { return restTemplate.getForObject("http://localhost:8081/userAll",List.class); } }

 

 

 

六,consumer的config配置?

  

 

 

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM