SpringCloud从入门到进阶(四)——使用SpringBoot搭建微服务

内容

  SpringBoot整合SpringCloud的Eureka、Zuul等组件,快速实现简单易懂且具有服务熔断、负载均衡的分布式架构1.0,体验微服务的魅力。

版本

  IDE:IDEA 2017.2.2 x64

  JDK:1.8.0_171

  manve:3.3.3

  SpringBoot:1.5.9.RELEASE

  SpringCloud:Dalston.SR1

适合人群

  ?Java开发人员

说明

  转载请说明出处:SpringCloud从入门到进阶(四)——使用SpringBoot搭建微服务

参考

Linux入门实践笔记(二)--Jar包运行与关闭

SpringCloud从入门到进阶(二)——注册中心Eureka

步骤

pom.xml

  在原有SpringBoot项目的基础上增加SpringCloud依赖

<?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.zih.jms</groupId>
    <artifactId>idlegood</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
?
    <name>idlegood</name>
?
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/>
    </parent>
?
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <!--添加1:在dependencyManagement标签中声明SpringCloud的版本,
    所有的SpringCloud组件的依赖都将使用该版本SpringCloud中规定的版本号 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
    <!--添加2:SpringCloud相关依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

    <!-- SpringBoot相关依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--actuator依赖 Spring Boot提供的项目运行状态监控功能-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
       ...其他省略

</project> 
yaml
#添加3:eurekaSever配置
eureka:
  client:
   service-url:
     defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
spring:
  #添加4:设置springboot项目的应用名称,并默认启动peer1
  application:
   name: application-idleGoodService   #注意:此处的名称一定要个路由接入服务器中的配置名一致
   profiles: active: peer1
   datasource:
    ...
    #省略原有Springboot项目的数据源、redis、mybatis、分页等配置
#添加5:增加日志输出,指明日志存放位置;同时需要在资源路径下引入配置文件
logging:
  file: logs/application-idleGoodService-${server.port}.logs
?
#添加6:增加peer1和peer2两种profiles的配置
---
spring:
  profiles: peer1
server:
   port: 8001
eureka:
  instance:
   instance-id: springcloud-idleGoodService-8001
management:
  port: 8101
  security:
   enabled: false
---
spring:
  profiles: peer2
server:
   port: 8002
eureka:
  instance:
   instance-id: springcloud-idleGoodService-8002
management:
  port: 8102
  security:
   enabled: false
SpringApplication
//开启EurekaClient
@EnableEurekaClient
@SpringBootApplication
...//包扫描、Swagger、事务的配置省略
public class IdlegoodApplication {
?
    //一些bean的注入和创建省略
   ...

    public static void main(String[] args) {
        SpringApplication.run(IdlegoodApplication.class, args);
    }
}
Controller
@RequestMapping("/test")
@RestController
public class DemoController {
?
    @PostMapping("/demoTest/{name}")
    public String demoTest(@PathVariable(value = "name") String name,
                           @RequestParam(value = "from") String user){
        return "Hello "+name+",this is DemoTest.From "+user+" .";
   }
}
本地测试

  使用postman请求Controller,测试通过

打包

  在命令行工具中进入项目pom文件所在路径,然后执行mvn clean package打包。

  过程可参考:SpringCloud从入门到进阶(二)——注册中心Eureka

拷贝

  使用Bitvise SFTP或WinSCP等工具将jar包上传到有公网的服务器,再使用scp命令将jar包拷贝到两台Web API服务器普通用户的~/jars路径下。

  过程可参考:SpringCloud从入门到进阶(二)——注册中心Eureka

修改hosts文件

  用于访问EurekaSever,微服务内部之间的调用不需要经过接入服务器。将内部域名eureka7001.com、eureka7002.com、eureka7003.com绑定到局域网IP 172.26.125.118。

#IP     域名      别名
[[email protected] jars]$ sudo vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.26.125.118   eureka7001.com
172.26.125.118   eureka7002.com
172.26.125.118   eureka7003.com

  过程可参考:SpringCloud从入门到进阶(二)——注册中心Eureka

运行

  分别在两台Web API服务器上执行一下两条命令,启动微服务

java -jar idlegood-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1  & #服务器A
java -jar idlegood-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2  & #服务器B

  访问EurekaSever,确认服务正常启动。

  先使用Postman直接请求Web API服务器的接口

  确保Web API服务器配置无误后再使用Postman请求路由接入服务器的接口。

  由于一个微服务中有多个实例,路由接入服务器会自动在这些实例之间进行负载均衡。

  注意:笔者在这一步遇到了请求路由接入服务器接口时,接口服务熔断。

  观察路由接入服务器中项目的日志

2018-10-23 19:09:01.809  INFO 9621 --- [nio-7081-exec-1] c.n.l.DynamicServerListLoadBalancer     : DynamicServerListLoadBalancer for client application-idleGoodService initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=application-idleGoodService,#下面这句可以看出,EurekaServer默认是按“主机名:端口号”的形式存储EurekaClient的信息current list of Servers=[iz8vb6a56ld0vy6vuaijriz:8002, iz8vb6a56ld0vy6vuaijrjz:8001],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone;       Instance count:2;Active connections count: 0;   Circuit breaker tripped count: 0;   Active connections per server: 0.0;]

  可以看到路由接入服务器已经从Eureka中读取到了微服务的信息,但是是“主机名:端口号”的形式。将所有微服务的主机名和内网IP地址的映射添加到路由接入服务器的hosts中即可解决该问题。

关闭

  关闭java程序请参考:Linux入门实践笔记(二)--Jar包运行与关闭

注意

  命令、代码拼写完一定要认真检查,尤其是大小写,空格等,避免因为马虎造成莫名的错误。

原文地址:https://www.cnblogs.com/lonelyJay/p/9842175.html

时间: 2024-10-29 01:09:54

SpringCloud从入门到进阶(四)——使用SpringBoot搭建微服务的相关文章

Java SpringBoot搭建微服务,配置maven

一:配置maven 1.下载maven,选择Binary tar.gz,解压拷贝到目录/usr/local/ https://maven.apache.org/download.cgi 2.配置系统默认maven路径,打开配置文件 $ open ~/.bash_profile 写入路径信息 export M2_HOME=/usr/local/apache-maven-3.3.9 export PATH=$PATH:$M2_HOME/bin 使之生效 $ source ~/.bash_profil

SpringCloud从入门到进阶(四)——生产环境下Eureka的完全分布式部署

内容 由于前两节的内容我们知道,开启了preferIpAddress后,Eureka的伪分布式部署会提示replica不可用.这一节我们讲解如何在生产环境下部署完全分布式的Eureka集群,确保开启了preferIpAddress后replica的可用性. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 Java开发人员 节点信息: 节

SpringCloud从入门到进阶(三)——路由接入Zuul

内容 SpringBoot整合SpringCloud的Eureka.Zuul等组件,快速实现简单易懂且具有服务熔断.负载均衡的分布式架构1.0,体验微服务的魅力. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 ?Java开发人员 说明 转载请说明出处:SpringCloud从入门到进阶(三)--路由接入Zuul 参考 Linux入门实

AngularJS进阶(四十)创建模块、服务

AngularJS进阶(四十)创建模块.服务 学习要点 使用模块构架应用 创建和使用服务 为什么要使用和创建服务与模块? 服务允许你打包可重用的功能,使之能在此应用中使用. 模块允许你打包可重用的功能,使之能跨应用使用. 一.应用程序模块化 先看看一个没有模块化的程序 <!DOCTYPE> <!-- use module --> <html ng-app="exampleApp"> <head> <title>Angluar

3 SpringBoot与微服务

SpringBoot的使用? 化繁为简: Spring MVC 需要定义各种配置,配置文件多. SpringBoot的核心功能? 独立运行: java -jar XXX.jar (以前启动SPring MVC需要有服务器,比如tomcat) 内嵌web服务器: 内嵌Tomcat. 简化配置:用starter简化Maven的配置 SpringBoot与微服务的关系 java的润滑剂 SpringCloud的使用 简化Java的分布式系统(负载均衡,服务发现,容错,分布式事务,) 简化java的分布

Springboot/Springclound微服务架构

1.   什么是微服务? 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务之间是松耦合的,同时微服务之间,通常是采用轻量级的基于 HTTP 的 RESTful API通信机制互相沟通,互相配合.每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境. 2.   微服务有什么特点? (1).复杂度可控 在将应用分解的同时,规避了原本复杂度无止境的积累.每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界.由于体积小.复杂度低,每个微服务可由

从 0 开始的微服务架构:(四)如何保障微服务架构下的数据一致性

虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题"Re:从 0 开始

springCloud搭建微服务集群+Zuul服务器端负载均衡

概述 最近研究了一下springCloud的微服务集群,主要用到了SpringCloud的服务发现和服务器端负载均衡,所有的项目都是用的springboot,可以和springCloud无缝对接. 技术选型服务发现:eureka负载均衡:zuul 实现Eureka集群(eurekaServer):8001.8002.8003服务提供方(eurekaClient):9001.9002服务端负载均衡服务:9100 1.新建工程eureka服务器,用idea创建springboot项目,引入eurek

SpringCloud(9)使用Spring Cloud OAuth2保护微服务系统

一.简介 OAth2是一个标准的授权协议. 在认证与授权的过程中,主要包含以下3种角色. 服务提供方 Authorization Server. 资源持有者 Resource Server. 客户端 Client. OAuth2的认证流程如图所示,具体如下. (1)用户(资源持有者)打开客户端 ,客户端询问用户授权. (2)用户同意授权. (3)客户端向授权服务器申请授权. (4)授权服务器对客户端进行认证,也包括用户信息的认证,认证成功后授权给予令牌. (5)客户端获取令牌后,携带令牌向资源服