springcloud(二)-最简单的实战

技术储备

Spring cloud并不是面向零基础开发人员,它有一定的学习曲线。

  • 语言基础:spring cloud是一个基于Java语言的工具套件,所以学习它需要一定的Java基础。当然,spring cloud同样也支持使用Scala,Groovy等语言进行开发。
  • Spring boot:Spring cloud是基于spring boot构建的,因此它延续了spring boot的契约模式以及开发模式。学习spring cloud之前需要学习spring boot,至少先入门。
  • 项目管理与构建工具:目前业界比较主流的项目管理与构建工具有maven和Gradle等,我想大家最常用的,或者说用的最多的还是maven吧。

工具及软件版本

  • JDK:springboot官方推荐使用的是JDK1.8,当然Spring cloud推荐的也是JDK1.8。所以你懂的呀,不用纠结低版本的了呀。
  • Spring boot:使用Spring Boot 1.5.9.RELEASE。虽然现在Spring boot2.0出来了,但是需要结合Spring cloud的版本兼容。
  • Spring cloud:使用 Spring Cloud Edgware RELEASE.(你要想用最新的也没问题,但是要注意springboot兼容性)
  • maven:我用的是3.5.0啊。无所谓
  • 开发工具:我独爱eclipse。虽然我知道IntelliJ IDEA 可能更优秀。

服务的提供者与服务的消费者

使用微服务构建的是分布式系统,微服务之间通过网络进行通信。我们使用服务提供者与服务消费者来描述为服务之间的调用关系。

名词 定义
服务提供者 服务的被调用方(即:为其他服务提供服务的服务)
服务消费者 服务的调用方(即:依赖其他服务的服务)

举个生活中的例子:我们去超市买东西,商品又是由厂商提供给超市的。在这一过程中,厂商就是服务的提高者,超市是服务的消费者。

我们只需要到超市消费就行,不用到厂商去了。

编写服务提供者

先准备下数据库和数据

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(40) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `balance` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (‘1‘, ‘account1‘, ‘张三‘, ‘20‘, ‘98.23‘);
INSERT INTO `user` VALUES (‘2‘, ‘account2‘, ‘李四‘, ‘24‘, ‘23.12‘);
INSERT INTO `user` VALUES (‘3‘, ‘account3‘, ‘王五‘, ‘32‘, ‘42.12‘);

创建一个springboot项目,ArtifactId为microservice-simple-provider-user

pom.xml

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4
 5   <groupId>com.itmuch.cloud</groupId>
 6   <artifactId>microservice-simple-provider-user</artifactId>
 7   <version>0.0.1-SNAPSHOT</version>
 8   <packaging>jar</packaging>
 9
10   <name>microservice-simple-provider-user</name>
11   <url>http://maven.apache.org</url>
12
13   <parent>
14         <groupId>org.springframework.boot</groupId>
15         <artifactId>spring-boot-starter-parent</artifactId>
16         <version>1.5.9.RELEASE</version>
17     </parent>
18
19   <properties>
20     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21     <java.version>1.8</java.version>
22   </properties>
23
24   <dependencies>
25            <dependency>
26             <groupId>org.springframework.boot</groupId>
27             <artifactId>spring-boot-starter-web</artifactId>
28         </dependency>
29         <dependency>
30                <groupId>mysql</groupId>
31                <artifactId>mysql-connector-java</artifactId>
32         </dependency>
33         <dependency>
34             <groupId>org.springframework.boot</groupId>
35             <artifactId>spring-boot-devtools</artifactId>
36             <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
37         </dependency>
38         <!-- jpa-->
39         <dependency>
40             <groupId>org.springframework.boot</groupId>
41             <artifactId>spring-boot-starter-data-jpa</artifactId>
42         </dependency>
43   </dependencies>
44
45 <!--   引入spring cloud 的依赖 -->
46     <dependencyManagement>
47         <dependencies>
48             <dependency>
49                 <groupId>org.springframework.cloud</groupId>
50                 <artifactId>spring-cloud-dependencies</artifactId>
51                 <version>Edgware.RELEASE</version>
52                 <type>pom</type>
53                 <scope>import</scope>
54             </dependency>
55         </dependencies>
56     </dependencyManagement>
57
58 <!--   添加spring-boot 的maven插件 -->
59     <build>
60         <plugins>
61             <plugin>
62                 <groupId>org.springframework.boot</groupId>
63                 <artifactId>spring-boot-maven-plugin</artifactId>
64             </plugin>
65         </plugins>
66     </build>
67
68 </project>

点击展开

用户实体类User.java

 1 package com.itmuch.cloud.entity;
 2
 3 import java.math.BigDecimal;
 4
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.GenerationType;
 8 import javax.persistence.Id;
 9
10 @Entity
11 public class User {
12     @Id
13     @GeneratedValue(strategy = GenerationType.AUTO)
14     private Long id;
15     private String username;
16     private String name;
17     private Integer age;
18     private BigDecimal balance;
19
20     public Long getId() {
21         return id;
22     }
23
24     public void setId(Long id) {
25         this.id = id;
26     }
27
28     public String getUsername() {
29         return username;
30     }
31
32     public void setUsername(String username) {
33         this.username = username;
34     }
35
36     public String getName() {
37         return name;
38     }
39
40     public void setName(String name) {
41         this.name = name;
42     }
43
44     public Integer getAge() {
45         return age;
46     }
47
48     public void setAge(Integer age) {
49         this.age = age;
50     }
51
52     public BigDecimal getBalance() {
53         return balance;
54     }
55
56     public void setBalance(BigDecimal balance) {
57         this.balance = balance;
58     }
59
60 }

点击展开

DAO

package com.itmuch.cloud.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.itmuch.cloud.entity.User;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}

创建Controller

package com.itmuch.cloud.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import com.itmuch.cloud.dao.UserRepository;
import com.itmuch.cloud.entity.User;

@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/{id}")
    public User findById(@PathVariable Long id) {
        User findOne = userRepository.findOne(id);
        return findOne;
    }
}

最后还有一个启动类不用说了吧。

配置文件application.yml

server:
  port: 8084
spring:
  application:
    name: microservice-provider-user
  jpa:
    generate-ddl: false
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL5Dialect
    hibernate:
      ddl-auto: none
  datasource:
    url: jdbc:mysql://localhost:3306/cloud?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  http:
    multipart:
      maxFileSize: 100Mb
      maxRequestSize: 100Mb
logging:
  level:
    root: INFO
    org.hibernate: INFO
    org.hibernate.type.descriptor.sql.BasicBinder: TRACE
    org.hibernate.type.descriptor.sql.BasicExtractor: TRACE

测试

启动访问localhost:8084/1. 试下结果。

{"id":1,"username":"account1","name":"张三","age":20,"balance":98.23}

哦了。

编写服务消费者

创建一个maven项目,ArtifactId是microservice-simple-consumer-movie.

pom.xml

一样一样的。

POJO类User.java

 1 package com.itmuch.cloud.pojo;
 2
 3 import java.math.BigDecimal;
 4
 5 public class User {
 6     private Long id;
 7     private String username;
 8     private String name;
 9     private Integer age;
10     private BigDecimal balance;
11
12     public Long getId() {
13         return id;
14     }
15
16     public void setId(Long id) {
17         this.id = id;
18     }
19
20     public String getUsername() {
21         return username;
22     }
23
24     public void setUsername(String username) {
25         this.username = username;
26     }
27
28     public String getName() {
29         return name;
30     }
31
32     public void setName(String name) {
33         this.name = name;
34     }
35
36     public Integer getAge() {
37         return age;
38     }
39
40     public void setAge(Integer age) {
41         this.age = age;
42     }
43
44     public BigDecimal getBalance() {
45         return balance;
46     }
47
48     public void setBalance(BigDecimal balance) {
49         this.balance = balance;
50     }
51
52 }

点击展开

Controller类

 1 package com.itmuch.cloud.controller;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.web.bind.annotation.GetMapping;
 5 import org.springframework.web.bind.annotation.PathVariable;
 6 import org.springframework.web.bind.annotation.RestController;
 7 import org.springframework.web.client.RestTemplate;
 8
 9 import com.itmuch.cloud.pojo.User;
10
11 @RestController
12 public class MovieController {
13     @Autowired
14     private RestTemplate restTemplate;
15
16     @GetMapping("/user/{id}")
17     public User findById(@PathVariable Long id) {
18         return restTemplate.getForObject("http://localhost:8084/" + id, User.class);
19     }
20 }

点击展开

启动类

 1 package com.itmuch.cloud;
 2
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.context.annotation.Bean;
 6 import org.springframework.web.client.RestTemplate;
 7
 8 @SpringBootApplication
 9 public class ConsumerMovieApplication {
10     @Bean
11     public RestTemplate restTemplate() {
12         return new RestTemplate();
13     }
14
15     public static void main(String[] args) {
16         SpringApplication.run(ConsumerMovieApplication.class, args);
17     }
18 }

点击展开

配置文件application.yml

server:
  port: 8082

测试

好了,你把两个服务都启动,访问http://127.0.0.1:8082/user/1, 看结果。

{"id":1,"username":"account1","name":"张三","age":20,"balance":98.23}

OK了。

原文地址:https://www.cnblogs.com/fengyuduke/p/10552885.html

时间: 2024-07-31 06:23:33

springcloud(二)-最简单的实战的相关文章

jquery Mobile应用第2课《构建跨平台APP:jQuery Mobile移动应用实战》连载二(简单的QWER键盘)

在jQuery Mobile的布局中,控件大多都是单独占据页面中的一行,按钮自然也不例外,但是仍然有一些方法能够让多个按钮组成一行,比如说在范例6-5中就利用按钮分组的方法使4个按钮并列在一行中,如图6-24和图6-25所示. 图6-24 实现按钮分组的方法 图6-25 分组的按钮 而在上一节中也许有读者已经注意到,头部栏中的按钮并没有占据一整行,也没有与多个按钮一起成组存在,那么在页面的其他部分是否也可以让按钮以这样的形式出现呢? [范例6-9 简单的QWER键盘] 01 <!DOCTYPE

微服务SpringCloud+Docker入门到高级实战

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架简介:讲解常用的微服务框架4.微服务下

AJAX学习整理二之简单实例

做了几个简单的实例,加载txt文本内容.加载xml文件内容,把xml文本内容转换成html表格显示.废话不多说,直接贴代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <head>     <title>通过ajax获取文本内容</title>     <meta charset="utf-8">     <scr

查找(二)简单清晰的B树、Trie树具体解释

查找(二) 散列表 散列表是普通数组概念的推广.因为对普通数组能够直接寻址,使得能在O(1)时间内訪问数组中的任何位置.在散列表中,不是直接把keyword作为数组的下标,而是依据keyword计算出对应的下标. 使用散列的查找算法分为两步.第一步是用散列函数将被查找的键转化为数组的一个索引. 我们须要面对两个或多个键都会散列到同样的索引值的情况.因此,第二步就是一个处理碰撞冲突的过程,由两种经典解决碰撞的方法:拉链法和线性探測法. 散列表是算法在时间和空间上作出权衡的经典样例. 假设没有内存限

查找(二)简单清晰的B树、Trie树详解

查找(二) 散列表 散列表是普通数组概念的推广.由于对普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置.在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标. 使用散列的查找算法分为两步.第一步是用散列函数将被查找的键转化为数组的一个索引. 我们需要面对两个或多个键都会散列到相同的索引值的情况.因此,第二步就是一个处理碰撞冲突的过程,由两种经典解决碰撞的方法:拉链法和线性探测法. 散列表是算法在时间和空间上作出权衡的经典例子. 如果没有内存限制,我们可以直接

ActiveMQ学习教程(二)——简单示例

ActiveMQ学习教程(二)--简单示例 一.应用IDEA构建Maven项目 File->New->Module...->Maven->勾选->选择->Next -> GroupId:com.jd.myMaven   |    ArtifactId:activeMQ    |    version:默认   ->Finish 项目构建成功!项目结构如下所示: 二.创建生产者类,模拟生产者发消息 Step1:java/activemq/JMSProducer

二、简单句的核心变化

二.简单句的核心变化 (一)谓语动词的变化 n. + v. 动词的时态 动词的语态 动词的情态 动词的否定 1. 时态: 时态 过去 现在 将来 过去将来 一般 did/was/were do/does will/am/is/are going to + V.原型 would/were/was/are going to + V.原型 进行 be + doing be + doing be + doing be + doing 完成 have/has+done had + done 完成进行 ha

[DesignPatterns]二、简单工厂模式(SimpleFactoryPattern)

参考书籍:大话设计模式 督促自己可以一步一步把书本好好看完学完,为未来做努力 简单工厂模式 这是我看完后的想法,简单工厂模式就是透过一个单独类去做判断来new出指定的类,前提时,这些需要new出的都是继承于一个Class底下 书本上是以计算机加减乘除来做教学,而我自己也尝试看书练习了出来 过去 在过去可能用一个Switch去搞定判断各个逻辑所要计算的结果 缺点:这样子使用的话,是有用到了封装,但一旦运算逻辑多的时候,就要担心是否会改错改到其他逻辑 现在 一.先设计出每个运算逻辑的共通属性以及增加

微服务SpringCloud+Docker入门到高级实战(教程详情)

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 1.IDEA JDK8 Maven SpringBoot基础 Linux 2.理解掌握并开发SpringCloud里面主流架构和组件的基础使用,还有部分源码原理的理解 3.掌握学习的技巧和解决问题的思路 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲