目录
Eureka部署linux环境挂载运行
- maven管理依赖的引入spring-boot-maven-plugin;
- springcloud依赖的引入spring-cloud-dependencies;
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 然后是启动类的改动 SpringBootServletInitializer 支持外部启动
package com.ll.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run( EurekaApplication.class, args );
}
}
- eureka.client.defaultZone: 这里目前一定要这么写,否则读取不到,http://ll-eureka:8080/eureka
server:
port: 20000
######################################################################
# -- eureka -- #
######################################################################
spring:
application:
name: eureka-server
eureka:
server:
enable-self-preservation: false
client:
# 注册中心不注册自己
register-with-eureka: false
# 不在注册中心拉去注册的服务列表
fetch-registry: false
- 然后传到linux环境下,记得装匹配版本的jdk , 这里用的是1.8
- 然后运行linux 命令试运行项目, java -jar item.jar 如果看到了美丽的springboot启动成功画面,那么恭喜下自己
- 然后让项目后台运行,启用悬挂命令(item.jar=当前的jar全名) nohup java -jar item.jar &
- 如果这个时候看到的画面卡顿了,不用担心,关闭ssh链接,重新进入一下
- ps -ef |grep eureka 查看下我们的进程
- 这个时候访问一下我们的Eureka
- 呀!出来了,心情大家懂得啊
- 如果没有实现 这里有我做的好的jar 直接启动就可以了Eureka部署包_eureka包,eureka.jar-微服务代码类资源-优快云下载
Eureka 客户端
- 客户端maven依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>eureka-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-consume</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 启动类
- 启动类记得开启Eureka客户端 @EnableDiscoveryClient 和 @EnableEurekaClient 是一样的,官方建议使用 @EnableDiscoveryClient
package com.ll;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableEurekaClient
@SpringBootApplication
public class JobApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run( JobApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources( JobApplication.class );
}
}
- yaml配置
- defaultZone:http://127.0.0.1:8080/eureka/ ,127.0.0.1eureka注册中心ip地址,20000eureka注册中心ip端口号
- 记得用spring.application.name:标明在eureka中心的名称,否则被标记为:unknown不好区分
server:
port: 8081
spring:
application:
name: eureka-sonsume
eureka:
client:
enabled: true
registry-fetch-interval-seconds: 10
service-url:
defaultZone: http://127.0.0.1:20000/eureka/
instance:
prefer-ip-address: true
lease-renewal-interval-in-seconds: 5 # 间隔5秒发送健康状态
lease-expiration-duration-in-seconds: 15 # 15秒未接收到健康心跳,视为宕机
- 完成启动效果图
- 获取 Eureka 服务信息对象 LoadBalancerClient
- 由 Eureka 自动引入
- 接口之间原生调用 使用 RestTemplate 对象即可
- 注入 RestTemplate 对象
@Bean
public RestTemplate restTemplate (){
return new RestTemplate();
}
- 接口调用演示代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@RestController
public class TestController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@GetMapping("get-str")
public Object getStr (){
//通过服务名,获取服务信息
ServiceInstance choose = loadBalancerClient.choose("EUREKA-CLIENT");
String host = choose.getHost();
int port = choose.getPort();
System.out.println(host+":"+port);
String url = String.format("http://%s:%s/get-str",host,port);
//接口调用
String resuleStr = restTemplate.getForObject(url, String.class);
return resuleStr;
}
@PostMapping("get-map")
public Object getMap ( ){
ServiceInstance choose = loadBalancerClient.choose("EUREKA-CLIENT");
String host = choose.getHost();
int port = choose.getPort();
System.out.println(host+":"+port);
String url = String.format("http://%s:%s/get-map",host,port);
//创建MultiValueMap对象传参
MultiValueMap<String, Object> requestEntity = new LinkedMultiValueMap<>();
requestEntity.add("name", "Mr.chenyb");
Map resuleMap = restTemplate.postForObject(url, requestEntity, Map.class);
return resuleMap;
}
}
Eureka 双节点集群
- Eureka 服务配置文件
- hostname:当前节点名称
- defaultZone:与其他节点通讯地址,数据同步
server:
port: 20000
spring:
application:
name: eureka-server
eureka:
server:
enable-self-preservation: false # 关闭服务自保
eviction-interval-timer-in-ms: 10000 # 每10秒剔除服务
client:
register-with-eureka: false
fetch-registry: false # 不允许注册自己
service-url:
defaultZone: http://192.168.120.1:30000/eureka # 与其他节点通讯地址
instance:
hostname: eureka1 # 当前节点名称
server:
port: 30000
spring:
application:
name: eureka-server2
eureka:
server:
enable-self-preservation: false # 关闭服务自保
eviction-interval-timer-in-ms: 10000 # 每10秒剔除服务
client:
register-with-eureka: false
fetch-registry: false # 不允许注册自己
service-url:
defaultZone: http://127.0.0.1:20000/eureka # 与其他节点通讯地址
instance:
hostname: eureka2 # 当前节点名称
- Eureka 客户端配置文件
- defaultZone:注册中心地址,配置集群地址,用“,”分隔,会自动检测可用的服务
server:
port: 8080
spring:
application:
name: eureka-client
eureka:
client:
enabled: true
registry-fetch-interval-seconds: 10
service-url:
defaultZone: http://127.0.0.1:20000/eureka/,http://192.168.120.1:30000/eureka/
instance:
prefer-ip-address: true
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 15
chenyb 随笔记录,只为方便自己学习
2018-11-05