开启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 学习源代码

springcloud (一) 介绍的更多相关文章

  1. springCloud 概念介绍

    微服务(Microservice) 那么首先介绍下微服务.微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以 ...

  2. SpringCloud版本介绍和SpringBoot的兼容性

    Spring Cloud是一个由众多独立子项目组成的大型综合项目,每个子项目有不同的发行节奏,都维护着自己的发布版本号.Spring Cloud通过一个资源清单BOM(Bill of Material ...

  3. dubbo&hsf&spring-cloud简单介绍

    Dubbo: 简介:Dubbo是一个分布式服务框架,以及SOA治理方案.其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等. 底部NIO基于netty ...

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响

    笔记 4.SpringCloud微服务核心组件Eureka介绍和闭源后影响     简介:         SpringCloud体系介绍             官方地址:http://projec ...

  5. 微服务介绍和springCloud组件

      微服务架构模式是:将整个web服务 组织成一系列小的web 服务,这些小的web服务可以进行独立的编译和部署,并通过各自暴露的API接口 进行相互通信,他们相互协作,作为一个整体,为客户提供服务功 ...

  6. 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  7. SpringCloud微框架系列整体模块梳理

    以下为Spring Cloud的核心功能: 分布式/版本化配置服务注册和发现路由服务和服务之间的调用负载均衡断路器分布式消息传递 通过这张图,我们来了解一下各组件配置使用运行流程: 1.请求统一通过A ...

  8. SpringCloud学习系列之六 ----- 路由网关Zuul基础使用教程

    前言 在上篇中介绍了SpringCloud Config的完美使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关 ...

  9. springcloud相关资料收集

    http://springboot.fun/  Spring  Boot 中文索引 http://springcloud.fun/   Spring Cloud 中文索引 https://spring ...

随机推荐

  1. Mysql Innodb 引擎优化 参数(innodb_buffer_pool_size)

    在mysql的学习过程中,要是不把一些基本概率弄的很清楚,难免显得过于不专业. 作用: 这个参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲 默认值:128M 专用mysql服务器设置的 ...

  2. OC中使用单例模式

    static Config * instance = nil; +(Config *) Instance { @synchronized(self) { if(nil == instance) { [ ...

  3. maven scope-一览表

  4. Ubuntu终端远程连接linux服务器

    SSH是一个远程接入软件,可以让你想坐在计算机前面一样操作计算机.SSH使用加密方式传输数据,是一种非常安全的工作方式 步骤如下: 前提:如果没有安装ssh的话请  sudo apt-get inst ...

  5. js 值和引用

    js对值和引用的赋值/传递在语法上没有区别,完全根据值得类型决定 简单值(即标量基本类型值),总是通过值复制的方式来赋值/传递,包括null,undefined,字符串,数字,布尔值和ES6中的sym ...

  6. Tomcat 配置虚拟路径保存、访问图片

    转载自:https://www.cnblogs.com/magic101/p/7756402.html 配置tomcat的虚拟映射路径 1.修改Tomcat的server.xml文件 <Host ...

  7. Codeforces 1027E Inverse Coloring 【DP】

    Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...

  8. ubnut16.4 下 设置静态ip

    一.编辑interfaces sudo vi /etc/network/interface ### i 键进入编辑 二.编辑该文件 auto loiface lo inet loopbackauto ...

  9. 从数据库导出数据到excel之POI操作

    项目说明: 1:数据库中有两张表,主键关联 2:根据条件查询数据 3:处理为需要的数据封装类型,然后传到导出excel的方法中 <--框架部署就不详谈了,用的spring框架--> 补充: ...

  10. Python 函数 -getattr()

    getattr(object, name[, default]) getatt() 函数用于返回一个对象属性值.object 对象.name 字符串,对象属性.object 默认返回值,如果不提供该参 ...