Eureka 服务集群搭建

什么是 Eureka 注册中心

服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来 存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是 SOA 架构中最基础的设 施之一。
 

 Eureka 注册中心三种角色

 

EurekaServer

通过 Register、Get、Renew 等接口提供服务的注册和发现。

 

ApplicationService(ServiceProvider)

服务提供方 把自身的服务实例注册到 Eureka Server 中

 


ApplicationClient(ServiceConsumer)

服务调用方 通过 EurekaServer 获取服务列表,消费服务。
 

 

搭建一个Eureka 集群

EurekaServer端

创建项目

可以通过spring.io官网提供的模板快速创建一个springboot项目,也可自己创建一个maven项目

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.yhm</groupId> 
<artifactId>springcloud-eureka-server</artifactId> 
<version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
<name>springcloud-eureka-server</name> 
<description>Demo project for Spring Boot</description>
<parent>
   <groupId>org.springframework.boot</groupId> 
   <artifactId>spring-boot-starter-parent</artifactId> 
   <version>1.5.13.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> 
</parent>
<properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEn coding>
   <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>Dalston.SR5</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>
          <dependency> 
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId> 
          </dependency>
          <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>

修改启动类

@EnableEurekaServer
 @SpringBootApplication 
public class EurekaApplication { 
    public static void main(String[] args) { 
      SpringApplication.run(EurekaApplication.class, args); 
} 
}


application.properties 全局配置文件
 

spring.application.name=eureka-server 
server.port=8761
#是否将自己注册到 Eureka-Server 中,默认的为 true
eureka.client.registerWithEureka=false
#是否冲 Eureka-Server 中获取服务注册信息,默认为 true 
eureka.client.fetchRegistry=false 
#设置 eureka 实例名称,与配置文件的变量为主  假如.properties 文件的名字叫做#application-eureka1.properties 则eureka.instance.hostname=eureka2
eureka.instance.hostname=eureka2
#设置服务注册中心地址,指向另一个注册中心 如果有多个则指向多个
eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eureka/

#有几个服务,则需要几个properties 文件


 

 

Eureka 集群部署

部署环境:需要安装 jdk1.8,正确配置环境变量。 注意:需要关闭 linux 的防火墙,或者是开放 8761 端口

将项目打包

Maven install

上传linux

在/usr/local/创建一个 eureka 的目录
 将项目的 jar 包拷贝到/usr/local/eureka

编写一个启动脚本文件

#!/bin/bash
cd`dirname$0`
CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename${BASH_SOURCE}`
JAR_NAME="项目名称就是打包项目的名称" 
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=配置文件变量名称就是application-eurker.properties 配置文件的后缀" #SPRING_PROFILES_ACTIV="" 
LOG_DIR=$CUR_SHELL_DIR/logs 
LOG_PATH=$LOG_DIR/${JAR_NAME%..log
echo_help() 
{ 
echo-e"syntax:sh$CUR_SHELL_NAMEstart|stop" 
}
if[-z$1];then 
echo_help
 exit1 
fi
if
[!-d"$LOG_DIR"];then 
mkdir"$LOG_DIR" fi
if
[!-f"$LOG_PATH"];then 
touch"$LOG_DIR" 
fi
if["$1"=="start"];then
#checkserver
 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}." 
exit1 
fi
echo"Startingthe$JAR_NAME..."
#start
nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH>>$LOG_PATH2>&1&
COUNT=0 
while[$COUNT-lt1];do 
sleep1 
COUNT=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME"|awk'{print$2}'|wc-l` 
if[$COUNT-gt0];then
 break 
fi 
done PIDS=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk'{print$2}'` 
echo"${JAR_NAME}StartedandthePIDis${PIDS}." 
echo"Youcancheckthelogfilein${LOG_PATH}fordetails."
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_NAMEdoesnotstarted!" 
exit1 
fi
echo-e"Stoppingthe$JAR_NAME..."
for PIDin$PIDS;do
 kill $PID>/dev/null2>&1 
done
COUNT=0 
while[$COUNT-lt1];do
 sleep1
 COUNT=1
 forPIDin$PIDS;do PID_EXIST=`ps--no-heading-p$PID` if[-n"$PID_EXIST"];then COUNT=0 break fi done done
echo-e"${JAR_NAME}StoppedandthePIDis${PIDS}."
else
echo_help exit1
fi


设置启动脚本的运行权限

Chmod-R755server.sh
 

修改 linux 的 host 文件

Vim /etc/hosts

192.168.70.134 eureka1

192.168.70.135 eureka2
 


启动 eureka 注册中心

./server.shstart 启动

./server.shstop 停止

 


通过浏览器访问注册中心的管理页面

 

在高可用的 Eureka 注册中心中构建 provider 服务

 

与Eureka server端的区别就是pom文件中的

<dependency> 
   <groupId>org.springframework.cloud</groupId>
<!--server中的是<artifactId>spring-cloud-starter-eureka-server</artifactId> -->
   <artifactId>spring-cloud-starter-eureka</artifactId> 
</dependency> 

启动类

与Eureka server的启动类相比这个是的两个注解是

@EnableEurekaClient

@SpringBootApplication 

application.properties 配置文件

spring.application.name=eureka-provider s
erver.port=9090
#设置服务注册中心地址,指向另一个注册中心 ,有几个为服务后边加几个地址
eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eureka/,http://eureka2:8761/eureka/

 修改 windows 的 host 文件


路径:C:\Windows\System32\drivers\etc 

192.168.70.134 eureka1

192.168.70.135 eureka2

编写服务接口


controller层

@RestController 
public class UserController {

@RequestMapping("/user") 
public List<User> getUsers(){
   List<User> list = new ArrayList<>(); 
   list.add(new User(1,"zhangsan",20));
   list.add(new User(2,"lisi",22)); 
   list.add(new User(3,"wangwu",20));
   return list; 
}
}

创建 pojo

public class User {
private int userid;
 private String username; 
private int userage; 
//getset方法以及构造方法
}

构建 consumer 服务

pom文件

与provider的一样

application.properties 配置文件

spring.application.name=eureka-consumer server.port=9091
#设置服务注册中心地址,指向另一个注册中心 
eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eureka/,http://eureka2:8761/eureka/

 在 Service 中完成服务的调用
 

@Service
 public class UserService {

@Autowired 
private LoadBalancerClient loadBalancerClient;//ribbon 负 载均衡器
public List<User> getUsers(){
 //选择调用的服务的名称 //ServiceInstance 封装了服务的基本信息,如 IP,端口 
ServiceInstance si = this.loadBalancerClient.choose("eureka-provider"); //拼接访问服务的
//这个字符串就是配置问价你这中的名字
URL StringBuffer sb = new StringBuffer(); //http://localhost:9090/user
sb.append("http://").append(si.getHost()).append(":").appen d(si.getPort()).append("/user");
//springMVC RestTemplate RestTemplate rt = new RestTemplate();
ParameterizedTypeReference<List<User>> type = new ParameterizedTypeReference<List<User>>() {};
//ResponseEntity:封装了返回值信息 ResponseEntity<List<User>> response = rt.exchange(sb.toString(),HttpMethod.GET, null, type); 
List<User> list =response.getBody(); return list; } }

 Controller

@RestController
 public class UserController {
@Autowired
 private UserService userService;
@RequestMapping("/consumer")
 public List<User> getUsers(){ return this.userService.getUsers();
 }
}

至此结束。
 


 


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值