搭建eureka server集群并提供服务

搭建Eureka Server集群

这里只简单的使用了两个节点:主节点(eurekaserver-master)和从节点(eurekaserver-slave),分别部署到两台计算机上搭建一个eureka server集群。

建立主节点

新建一个spring boot项目配置其所需依赖:

	<dependencies>
		<!-- spring cloud eureka server启动器 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</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>

在application.yml配置文件中添加以下配置:

spring:
  application:
    name: eureka-server-cluster
  security:
    user:   #通过用户名和密码为注册中心加上安全认证
      name: alee
      password: 123456
eureka:
  instance:
    lease-renewal-interval-in-seconds: 5    #eureka client发送心跳给server端的频率 默认30s
    lease-expiration-duration-in-seconds: 5   #eureka server端自上一次收到client端心跳之后等待下一次心跳的超时时间 若这段时间仍无心跳则移除该Instance 默认90s
  client:
    register-with-eureka: false   #此应用本身为注册中心,所以不应再向注册中心(自己)注册自己
    fetch-registry: false   #取消检索服务功能
    healthcheck:    #开启健康检查
      enabled: true
  server:
    enable-self-preservation: false   #关闭自我保护
    eviction-interval-timer-in-ms: 5000   #清理间隔 默认60000ms
server:
  port: 8200

再添加一个application-master.yml文件,配置项如下:

eureka:
  instance:
    hostname: eureka-master
  client:
    service-url.defaultZone: http://alee:123456@{从节点IP}:8200/eureka

spring.security…为该注册中心服务加上了安全认证,再通过代码配置开启基于http basic的安全认证:

@Configuration
@EnableWebSecurity
public class EurekaServerSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //关闭跨域
        http.csrf().disable();
        //开启basic认证
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }
}

服务启动类需加上@EnableEurekaServer注解:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class, args);
	}

}

然后使用mvn package打包发布到服务器上通过 java -jar -Dspring.profiles.active=master 文件名.jar 启动服务。

建立从节点

可以再次在项目中添加一个application-slave.yml文件,其配置项如下:

eureka:
  instance:
    hostname: eureka-slave
  client:
    service-url.defaultZone: http://alee:123456@{主节点IP}:8200/eureka

然后继续打包、部署,通过java -jar -Dspring.profiles.active=slave 文件名.jar 命令运行在另一台服务器上。

创建服务

创建生产者服务

新建一个springboot项目配置其pom.xml文件中依赖如下:

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</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>

在application.yml配置文件中添加以下配置:

spring:
  application:
    name: eureka-client-producer
server:
  port: 8201
eureka:
  client:
    service-url.defaultZone: http://alee:123456@192.168.65.192:8200/eureka/,http://alee:123456@192.168.65.205:8200/eureka/    #集群的两个服务注册地址最好都配置上
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}

添加控制层对外提供Web API接口:

@RestController
@RequestMapping("/")
public class AreaController {
    @GetMapping("/get")
    public String getArea() {
        return "China";
    }
}

在启动类上添加@EnableEurekaClient注解:

@EnableEurekaClient
@SpringBootApplication
public class EurekaClientProducerApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaClientProducerApplication.class, args);
	}

}

创建消费者服务

新建一个spring boot项目,其pom.xml配置与生产者的一样,添加application.yml中配置信息:

spring:
  application:
    name: eureka-client-consumer
server:
  port: 8202
eureka:
  client:
    service-url.defaultZone: http://alee:123456@{主节点IP}:8200/eureka/,http://alee:123456@{从节点IP}:8200/eureka/    #集群的两个服务注册地址最好都配置上
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}

添加一个RestTemplate类的配置类实现控制层自动注入获取实例,并为其添加@LoadBalanced注解实现负载均衡:

@Configuration
public class RestTemplateConfiguration {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

在消费者添加一个控制层对外提供一个Web API接口并通过调用生产者的方法返回数据:

@RestController
@RequestMapping("/")
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/get")
    public String test() {
        return restTemplate.getForObject("http://eureka-client-producer/get", String.class);
    }
}

最后在消费者启动类上加上@EnableEurekaClient注解,到此eureka server集群的搭建并实现提供服务的任务到此完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值