SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)

简介:

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线 )。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包

以下为Spring Cloud的核心功能:

分布式/版本化配置

服务注册和发现

路由

服务和服务之间的调用

负载均衡

断路器

分布式消息传递
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第1张图片
1、请求统一通过API网关(Zuul)来访问内部服务.

2、网关接收到请求后,从注册中心(Eureka)获取可用服务

3、由Ribbon进行均衡负载后,分发到后端具体实例

4、微服务之间通过Feign进行通信处理业务

5、Hystrix负责处理服务超时熔断

6、Turbine监控服务间的调用和熔断相关指标
springcloud 的 版本由伦敦地铁站的名称定义的

想更深入的了解建议去官网
springcloud 中文文档 网站https://springcloud.cc/spring-cloud-dalston.html
开发环境( eclipse , jdk1.8, maven,springboot, springcloud)

1)项目搭建()

首先说springcloud 是一个微服务 开发 的 可以单个模块 作为一个进程来运行
搭建出来cloud父级工程

SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第2张图片
2)
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第3张图片
结构
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第4张图片
父级pom文件
包含boot的版本 和cloud的版本
主要定义的pom文件 ,将后续各个子模块公用的jar等统一提取出来 ,类似是一个抽象类 。


  4.0.0
  com.xxx
  microservicecloud
  0.0.1-SNAPSHOT
  pom

		UTF-8
		1.8
		1.8
		4.12
		1.2.17
		1.16.18
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				Dalston.SR1
				pom
				import
			
			
				org.springframework.boot
				spring-boot-dependencies
				2.1.3.RELEASE
				pom
				import
			
			
				mysql
				mysql-connector-java
				5.0.4
			
			
				com.alibaba
				druid
				1.0.31
			
			
				org.mybatis.spring.boot
				mybatis-spring-boot-starter
				1.3.0
			
			
				ch.qos.logback
				logback-core
				1.2.3
			
			
				junit
				junit
				${junit.version}
				test
			
			
				log4j
				log4j
				${log4j.version}
			
		
	

在创建 子模块 的 公共类

1 )SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第5张图片
2)
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第6张图片
pom文件


  4.0.0
  
    com.xxx
    microservicecloud
    0.0.1-SNAPSHOT
  
  microservicecloud-api  
  	
		
			org.projectlombok
			lombok
		
		
			org.springframework.cloud
			spring-cloud-starter-feign
		
	
  

这时 父级的包路径也会多一个microservicecloud-api公共的包 这样也就意味着父级工程包含着这个公共类
当这个pom文件到入就会发父级 的pom文件名 就会 多一个microservicecloud-api
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第7张图片
在创建之后 创建实体类 以便于 以后使用 减少代码的冗余
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第8张图片

在构建一个springBoot子模块 microservicecloud-provider-dept-8083(提供者)

建完之后 父级 项目同样多一个子包
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第9张图片
pom文件

注意:引入自己定义的api公共包,可以使用Usert的use 这个实体类剩下的就是springboot的依赖


  4.0.0
  
    com.xxx
    microservicecloud
    0.0.1-SNAPSHOT
  
  microservicecloud-provider-dept-8083
	
		
		
			com.xxx
			microservicecloud-api
			${project.version}
		
		
		
			org.springframework.boot
			spring-boot-starter-actuator
		
		
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka
		
		
			org.springframework.cloud
			spring-cloud-starter-config
		
		
			junit
			junit
		
		
			mysql
			mysql-connector-java
		
		
			com.alibaba
			druid
		
		
			ch.qos.logback
			logback-core
		
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
		
		
			org.springframework.boot
			spring-boot-starter-jetty
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.boot
			spring-boot-starter-test
		
		
		
			org.springframework
			springloaded
		
		
			org.springframework.boot
			spring-boot-devtools
		
	



.yml配置文件

server:
  port: 8083
  
mybatis:
                                          
  type-aliases-package: com.xxx.user                  # 所有user别名类所在包
  mapper-locations:
  - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件
    
spring:
   application:
    name: microservicecloud-dept 
   datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: com.mysql.jdbc.Driver               # mysql驱动包
    url: jdbc:mysql://localhost:3306/1807              # 数据库名称
    username: root
    password: root
    dbcp2:
      min-idle: 5                                           # 数据库连接池的最小维持连接数
      initial-size: 5                                       # 初始化连接数
      max-total: 5                                          # 最大连接数
      max-wait-millis: 200  
      
freemarker: 
    template-loader-path: classpath:/templates/
    cache: false
    charset: UTF-8
    check-template-location: true
    content-type: text/html; charset=utf-8
    expose-request-attributes: true
    expose-session-attributes: true
    request-context-attribute: request                                                         

       
logging:     # 打印日志
   level:   
     com.xxx.mapper: debug
     


springboot 结构
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第10张图片

controller层

package com.xxx.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.xxx.service.UserService;
import com.xxx.user.User;


@Controller
public class UserController {

	@Autowired
	private UserService  userService;
	
	@RequestMapping(value = "/list/user", method = RequestMethod.GET)
	public String list(ModelMap map){
		List list=userService.list();
		map.put("list", list);
		return "user";
	}
}

Userserviceimp层

package com.xxx.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xxx.mapper.UserMapper;
import com.xxx.service.UserService;
import com.xxx.user.User;
@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;


	@Override
	public List list() {
		// TODO Auto-generated method stub
		return userMapper.findAll();
	}
	
	
}

mapper接口 和mapper.xml 启动类 不在介绍

.FTL





Insert title here


  
<#list list as user>
姓名 性别 年龄 修改 删除
${user.userId} ${user.userName} ${user.userSex} ${user.userAge} 修改 删除
新增

这些都 准备好 首先为了更好的 理解 可以先看 一下任务管理器的 进程 SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第11张图片

启动 boot
选择启动类 右击 -->runAS–>Spring Boot App
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第12张图片
启动成功看一下 进程
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第13张图片
看一下 结果
已经展示到页面 ,把公共类分离,是可以使用的
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第14张图片

在构建 一个 microservicecloud-consumer-dept-8084模块(消费者)

1,
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第15张图片
这时候 父级工下会有microservicecloud-consumer-dept-8084的包
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第16张图片

1. microservicecloud-consumer-dept-8084 pom配置文件


  4.0.0
  
    com.xxx
    microservicecloud
    0.0.1-SNAPSHOT
  
  microservicecloud-consumer-dept-8084
     用户微服务消费者
     
		
			com.xxx
			microservicecloud-api
			${project.version}
		
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka
		
		
			org.springframework.cloud
			spring-cloud-starter-ribbon
		
		
			org.springframework.cloud
			spring-cloud-starter-config
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			org.springframework
			springloaded
		
		
			org.springframework.boot
			spring-boot-devtools
		
		
			
			org.springframework.boot
			spring-boot-starter-freemarker
		
	
	 

2. application.yml 配置文件

我在这里只配置了一个端口 因为只需要一个端口

server:
  port: 8084
  

3. 创建ConfigBean类

package com.xxx.cfgbeans;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration //相当与配置 文件application.xml
public class ConfigBean {
	
	
	@Bean
	public RestTemplate geRestTemplate() {
		
		return  new RestTemplate();
	}
	
	

}

SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第17张图片

4.controller类

package com.xxx.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.xxx.user.User;

@Controller
public class UserControllerConsumer {
    //定义提供者的http://.........
	private static final String REST_URL_PREFIX="http://localhost:8083";
	
	
	@Autowired
	private RestTemplate restTemplate; //RestTemplate提供了很多的便捷访问远程Http服务的方法	是一种简洁的访问restfuiA模板类。
	//是Spring提供的用于 访问 REst服务的 客户端模板工具类
	 
	/**
	 * 消费者 查询
	 * @return
	 */
     /*使用 使用restTemplate访问restful接口非常的简单 (url, requestMap,
	 ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。*/
	@RequestMapping(value="/tt/user/list",  method = RequestMethod.GET)
    @ResponseBody
	public String   list() {
		   //定义的http+"提供者的方法",类型.class 应为我的提供者方法是 String 所以这里也是String  
		  return restTemplate.getForObject(REST_URL_PREFIX+"/list/user",String.class);
	}
	
	
	
	
}


5.启动类

package com.xxx;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.filters.discovery.PatternServiceRouteMapper;

@SpringBootApplication
public class UserConsumerApp {

  public static void main(String[] args) {

	  SpringApplication.run(UserConsumerApp.class, args);
	  
}
	
}

结构
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第18张图片

6.启动项目

提供者和消费者两个都要启动
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第19张图片
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第20张图片
现在 在去看一下进程 更好的理解微服务
也就是每多启动一个项目 就会多一个进程
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第21张图片
打开浏览器 访问一下 注意是拿 消费者的端口 (8084)访问

SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第22张图片
消费者可以拿到数据

查看日志
SpringCloud简介与简单---微服务开发搭建(提供者与消费者)(1)_第23张图片

你可能感兴趣的:(SpringCloud)