SpringCloud 常用配置

SpringCloud 常用配置

负载均衡分类

集中式负载均衡,客户端和服务端使用独立的负载均衡措施(硬件的F5,软件的Nginx)
在这里插入图片描述
进程内负载均衡,将负载均衡逻辑集成在客户端组件中,客户端从注册中心获取可用服务,然后再从服务地址中选择合适的服务端发起请求(Ribbon)
在这里插入图片描述

搭建集群版Eureka Server

Eureka Server注册中心集群中的每个节点都是平等的,每个节点可以作为一个服务,服务节点之间通过发送心跳进行投票。

依赖单机版的eurekaServer的项目修改其中的内容即可。

  1. 新建文件application-eurekaserver1.properties、application-eurekaserver2.properties
spring.application.name=eureka-server
server.port=8761

# 定义Eureka Server实例在注册中心中的命名。建议使用配置文件的后缀定义。
eureka.instance.hostname=eurekaserver1
# 配置集群中其他Eureka Server节点的信息。如果需要配置多个节点,使用逗号','分割多个节点信息。
# 节点的信息格式为: http://地址:端口/eureka/  。 地址可以使用IP、域名、主机名定义。
# 使用HTTP Basic语法,提供安全认证中需要使用的用户名和密码。
# 语法是: http://用户名:密码@地址:端口/eureka/
eureka.client.serviceUrl.defaultZone=http://eurekaserver2:8761/eureka/
# application-eurekaserver2.properties
spring.application.name=eureka-server
server.port=8761

# 定义Eureka Server实例在注册中心中的命名。建议使用配置文件的后缀定义。
eureka.instance.hostname=eurekaserver1
# 配置集群中其他Eureka Server节点的信息。如果需要配置多个节点,使用逗号','分割多个节点信息。
# 节点的信息格式为: http://地址:端口/eureka/  。 地址可以使用IP、域名、主机名定义。
# 使用HTTP Basic语法,提供安全认证中需要使用的用户名和密码。
# 语法是: http://用户名:密码@地址:端口/eureka/
eureka.client.serviceUrl.defaultZone=http://eurekaserver2:8761/eureka/

修改 host 文件

192.168.186.115 eurekaserver1
192.168.186.116 eurekaserver2

打包程序分别注册到两个eurekaserver
在上传jar包同级目录新建文件,vi eurekaserver.sh,修改对应的参数

#!/bin/bash
 
cd `dirname $0`
 
CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
 
JAR_NAME="项目jar包名称"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
 
#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""
 
SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件变量名称"
#SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME%..log
 
echo_help()
{
    echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}
 
if [ -z $1 ];then
    echo_help
    exit 1
fi
 
if [ ! -d "$LOG_DIR" ];then
    mkdir "$LOG_DIR"
fi
 
if [ ! -f "$LOG_PATH" ];then
    touch "$LOG_DIR"
fi
 
if [ "$1" == "start" ];then
 
    # check server
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -n "$PIDS" ]; then
        echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
        exit 1
    fi
 
    echo "Starting the $JAR_NAME..."
 
    # start
    nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
        if [ $COUNT -gt 0 ]; then
            break
        fi
    done
    PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
    echo "${JAR_NAME} Started and the PID is ${PIDS}."
    echo "You can check the log file in ${LOG_PATH} for details."
 
elif [ "$1" == "stop" ];then
 
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -z "$PIDS" ]; then
        echo "ERROR:The $JAR_NAME does not started!"
        exit 1
    fi
 
    echo -e "Stopping the $JAR_NAME..."
 
    for PID in $PIDS; do
        kill $PID > /dev/null 2>&1
    done
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=1
        for PID in $PIDS ; do
            PID_EXIST=`ps --no-heading -p $PID`
            if [ -n "$PID_EXIST" ]; then
                COUNT=0
                break
            fi
        done
    done
 
    echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
else
    echo_help
    exit 1
fi

修改可执行权限

chmod 755 eurekaserver.sh

#启动Eureka Server  - ./eurekaserver.sh start
#关闭Eureka Server  - ./eurekaserver.sh stop

springcloudの核心组件Eureka、Ribbon、Feign、Hystrix、Zuul

各个组件角色扮演:

Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
Zuul:如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务
在这里插入图片描述
原文链接

搭建单机版Eureka Server

  1. 使用spring官网生成模板项目,https://start.spring.io/,spring cloud版本Edgware.SR4,spring boot版本1.5.16在这里插入图片描述
  2. 修改项目的pom文件
<?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.example</groupId>
    <artifactId>eurekaServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>eurekaServer</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.16.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </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>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- spring cloud 默认配置启动器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- spring cloud Eureka Server 启动器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. 修改全局配置文件 application.properties
# eclipse安装Properties Editor,可以添加中文注释,在Eclipse的 【Help】-> 【 Install New Software.. 】 打开安装插件的向导输入地址,
# http://propedit.sourceforge.jp/eclipse/updates/ 稍等片刻,选择Properties Editor安装后重启即可使用。

# 设置spring应用命名,可以自定义,非必要
spring.application.name=eureka-server
# 设置Eureka Server WEB控制台端口,自定义
server.port=8761

#是否将自己注册到Eureka-Server中,默认的为true
eureka.client.registerWithEureka=false
#是否从Eureka-Server中获取服务注册信息,默认为true
eureka.client.fetchRegistry=false
  1. 启动类增加@EnableEurekaServer 注解来开启Eureka Server服务
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
  1. 访问Eureka Server WEB控制台
    http://localhost:8761/

启动类增加@EnableEurekaServer注解后,提示EnableEurekaServer cannot be resolved to a type,查找网上问题无法解决,遂删除掉maven库中的boot和cloud文件夹,重新更新库问题解决,原因jar包问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值