开启springcloud 之旅...
传统单体架构:
微服务架构:
每个模块独立运行,就是独立的进程。
接下来基于springboot 来构建微服务:
1, 客户端-》订单微服务-》用户微服务
订单微服务结构:
pom.xml:
<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.tuling.springcloud</groupId>
<artifactId>03-microservice-order</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>03-microservice-order</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<dependencies>
<!-- Spring WEB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 集成Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
OrderController:
package com.tuling.springcloud.api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/order")
public class OrderController {
private final Logger logger = LoggerFactory.getLogger(OrderController.class);
@Autowired
private RestTemplate restTemplate;
@Value("${user.getUserByIdUrl}")
private String userByIdUrl;
@RequestMapping("/user/getById")
public Object getUserById(String userId) {
String url = userByIdUrl + "?id=" + userId;
logger.debug("param userId : {}, request url : {}", userId, url);
Object result = restTemplate.getForEntity(url, Object.class);
return result;
}
}
CommonConfig.java:
package com.jiagoushi.springcloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class CommonConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
application.properties
server.port=8082 ## db config spring.datasource.url=jdbc:mysql://localhost:3306/springcloud spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ## log logging.level.root=INFO logging.level.org.springframework.web=DEBUG logging.level.com.tuling.springcloud=DEBUG user.getUserByIdUrl=http://localhost:8083/user/getById
订单application.properties: user.getUserByIdUrl=http://localhost:8083/user/getById 是用户微服务地址
用户微服务结构:
pom.xml:
<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.tuling.springcloud</groupId>
<artifactId>03-microservice-user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>03-microservice-user</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<dependencies>
<!-- Spring WEB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 集成Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
UserController.java
package com.tuling.springcloud.api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.tuling.springcloud.bean.User;
import com.tuling.springcloud.service.UserService;
@RestController
@RequestMapping("/user")
public class UserController {
private final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
@RequestMapping("/getById")
public User getUserById(String id) {
logger.debug("param id : {}", id);
return this.userService.findById(Integer.parseInt(id));
}
}
UserService.java:
package com.tuling.springcloud.service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.tuling.springcloud.bean.User; import com.tuling.springcloud.mapper.UserMapper; @Service public class UserService { private final Logger logger = LoggerFactory.getLogger(UserService.class); @Autowired private UserMapper userMapper; public User findById(Integer id){ logger.debug("param id : {}" , id); User u = this.userMapper.findById(id); logger.debug("result name : {}" , u.getName()); return u; } }
UserMapper
package com.tuling.springcloud.service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.tuling.springcloud.bean.User; import com.tuling.springcloud.mapper.UserMapper; @Service public class UserService { private final Logger logger = LoggerFactory.getLogger(UserService.class); @Autowired private UserMapper userMapper; public User findById(Integer id){ logger.debug("param id : {}" , id); User u = this.userMapper.findById(id); logger.debug("result name : {}" , u.getName()); return u; } }
User
package com.tuling.springcloud.bean; public class User { private Integer id; private String name; private Integer age; private String address; private String phone; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
application.properties
server.port=8083 ## db config spring.datasource.url=jdbc:mysql://localhost:3306/springcloud spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ## log logging.level.root=INFO logging.level.org.springframework.web=DEBUG logging.level.com.tuling.springcloud=DEBUG
order 微服务 通过spring提供的 RestTemplate这个类来调用微服务。
2个微服务都启动之后,客户端直接访问订单微服务,就可以得到结果。因为订单微服务通过rest调用了用户微服务去查数据库了
总结:
1,这次是一个简单的微服务相互之间调用,每个微服务之间都可以有自己独立的数据库,也可没有。
2,这种微服务之间相互依赖,耦合度强,如何集群的话就不知道调哪个微服务,所以需要eureka来做注册中心
欢迎来QQ群:592495675 一起研究 java技术,群里技术大佬,还有所有springCloud 学习源代码