一、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配置?

