springcloud入门基础搭建之eureka

目录

1.eureka注册中心

1.1创建springcloud-eureka1项目

1.2引入依赖eureka-server

1.3配置文件

1.4主启动添加@EnableEurekaServer启动服务

 1.5访问eureka注册中心

 2.eureka集群搭建

2.1修改hosts文件

2.2新建第二个eureka服务

2.3修改配置文件

2.4微服务向eureka注册中心注册服务

3.生产者

3.1创建3个生产者项目

3.2添加依赖

3.3配置文件

3.4主启动类添加@EnableEurekaClient注解

3.5编写controller

4.消费者

4.1新建子模块

4.2添加依赖

4.3配置文件

4.4主启动类添加@EnableEurekaClient注解

 4.5配置restTemplate

4.6编写controller

 4.6启动服务

5.扩展使用

传送门


1.eureka注册中心

1.1创建springcloud-eureka1项目

        在父项目上新建一个子模块springcloud-eureka1,端口为9110

        父项目版本详见:https://blog.csdn.net/bfss_11/article/details/119056522

        涉及文件:

1.2引入依赖eureka-server

        组件版本已在父项目中统一管理,子模块中只需要引入对应依赖即可

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
			<exclusions>
				<exclusion>
				<groupId>javax.servlet</groupId>
				<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

1.3配置文件

       

spring:
  application:
    name: springcloud-eureka1
      
eureka:
  instance:
    hostname: localhost #eureka服务端实例名称
  client:
    register-with-eureka: false #false不向注册中心注册自己
    fetch-registry: false #false本身为注册中心,不需要向注册中心拉取服务
    service-url:
      defaultZone: http://localhost:9110/eureka/
  server:
    eviction-interval-timer-in-ms: 5000
    
server:
  port: 9110

1.4主启动添加@EnableEurekaServer启动服务

 1.5访问eureka注册中心

        访问:http://localhost:9110,出现如下内容即服务启动成功

 2.eureka集群搭建

2.1修改hosts文件

        hosts文件位于:C:\Windows\System32\drivers\etc

127.0.0.1 test1
127.0.0.1 test2

2.2新建第二个eureka服务

        新建子模块springcloud-eureka2,端口为9120

        建立步骤与上面创建springcloud-eureka1服务相同

2.3修改配置文件

        springcloud-eureka1

spring:
  application:
    name: springcloud-eureka1
      
eureka:
  instance:
    #修改部分。eureka服务端实例名称。和hosts中映射名相同
    hostname: test1 
  client:
    register-with-eureka: false 
    fetch-registry: false 
    service-url:
      #修改部分。向另一台eureka服务注册
      defaultZone: http://test2:9120/eureka/ 
  server:
    eviction-interval-timer-in-ms: 5000
    
server:
  port: 9110

springcloud-eureka2

spring:
  application:
    name: springcloud-eureka2
    
eureka:
  instance:
    #修改部分。eureka服务端实例名称。和hosts中映射名相同
    hostname: test2
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #修改部分。向另一台eureka服务注册
      defaultZone: http://test1:9110/eureka/
  server:
    eviction-interval-timer-in-ms: 5000
    
server:
  port: 9120

2.4微服务向eureka注册中心注册服务

        微服务向eureka集群注册服务时,需要同时向集群中所有eureka注册。即配置eureka.service-url时

    service-url:
      defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/

3.生产者

3.1创建3个生产者项目

        springcloud-common1、springcloud-common2、springcloud-common3,端口分别为9210、9220、9230

以springcloud-common1为例,涉及文件为:

3.2添加依赖

        生产者需要向eureka注册中心注册,添加客户端依赖(版本在父项目中定义)

        pom.xml

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

3.3配置文件

applicaton.yml

spring:
  profiles:
    active:
    - one
  application:
    name: springcloud-common #多个服务应用名相同
        
eureka:
  instance:
    instance-id: springcloud-common1 #向eureka中注册的实例名不同
    appname: ${spring.application.name}
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 5
  client:
    service-url:
      #同时向eureka集群中的所有服务注册
      defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/

application profiles文件中定义三个服务的端口号。分别为one=9210,two=9220,three=9230

application-one.properties

server.port=9210

application-two.properties

server.port=9220

application-three.properties

server.port=9230

3.4主启动类添加@EnableEurekaClient注解

3.5编写controller

        返回端口号,便于负载均衡时知道调用了哪一个服务实例

package com.zy.controller;

import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@CrossOrigin
@RestController
@RequestMapping("/com")
public class CommonController {

	@Value("${server.port}")
	private Integer port;

	@RequestMapping("/get")
	public Map<String, Object> get(@RequestBody Map<String, Object> parm) {
		parm.put("port", port);
		System.out.println(parm);
		return parm;
	}

}

4.消费者

4.1新建子模块

        新建springcloud-comsumer1项目,端口号为9310

        涉及文件

        

4.2添加依赖

        pom.xml添加eureka客户端依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

4.3配置文件

        application.yml

spring:
  application:
    name: springcloud-consumer
        
server:
  port: 9310

eureka:
  instance:
    instance-id: springcloud-consumer1
    appname: ${spring.application.name}
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 5
  client:
    service-url:
      #同时向集群中的所有eureka服务注册
      defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/

4.4主启动类添加@EnableEurekaClient注解

 4.5配置restTemplate

        在resttemplate上添加@LoadBalanced。使用服务名调用

package com.zy.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
@LoadBalancerClient(value="SPRINGCLOUD-COMMON")
public class RestTemplateConfiguration {
	
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
	

}

4.6编写controller

        通过resttemplate访问服务提供者springcloud-common的接口

package com.zy.controller;

import java.util.Map;

import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@CrossOrigin
@RestController
@RequestMapping("/consumer")
@SuppressWarnings({ "rawtypes", "unchecked" })
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    private static String port = null;

    @RequestMapping("/get")
    public Object get(@RequestBody Map<String, Object> parm) {
        ResponseEntity<Map> postForEntity = restTemplate.postForEntity("http://SPRINGCLOUD-COMMON/com/get", parm,
                Map.class);
        Map<String, Object> body = postForEntity.getBody();
        System.out.println(body);
        String rstPort = MapUtils.getString(body, "port");
        if (StringUtils.equals(port, rstPort)) {
            System.err.println("相同:" + port + " ,rstPort:" + rstPort);
        }
        port = rstPort;
        return body;
    }

}

 4.6启动服务

        启动两个eureka服务,三个服务提供者(springcloud-common),服务消费者spirngcloud-consumer1

        访问eureka服务,发现生产者、消费者均已注册成功

        postman请求消费者接口,成功获取到服务提供者返回的信息,9210说明是调用了springcloud-common1服务

5.扩展使用

服务上下线监控

EurekaInstanceCanceledEvent 服务下线事件。

EurekaInstanceRegisteredEvent 服务注册事件。

EurekaInstanceRenewedEvent 服务续约事件。

EurekaRegistryAvailableEvent Eureka 注册中心启动事件。

EurekaServerStartedEvent Eureka Server 启动事件。

package com.zy.eureka;

import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRegisteredEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRenewedEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaRegistryAvailableEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaServerStartedEvent;
import org.springframework.context.event.EventListener;
import com.netflix.appinfo.InstanceInfo;

//@Component
public class EurekaStatusChangeListener {

	@EventListener
	public void listen(EurekaInstanceCanceledEvent event) {
		String serverId = event.getServerId();
		System.err.println(serverId + ":" + event.getAppName() + "服务下线");
	}

	@EventListener
	public void listen(EurekaInstanceRegisteredEvent event) {
		InstanceInfo instanceInfo = event.getInstanceInfo();
		String instanceId = instanceInfo.getInstanceId();
		System.err.println(instanceId + ":" + instanceInfo.getAppName() + "服务注册");
	}

	@EventListener
	public void listen(EurekaServerStartedEvent event) {
		Object source = event.getSource();
		System.err.println(source + "\r\n服务启动");
	}

	@EventListener
	public void listen(EurekaInstanceRenewedEvent event) {
		InstanceInfo instanceInfo = event.getInstanceInfo();
		String instanceId = instanceInfo.getInstanceId();
		System.err.println(instanceId + ":" + instanceInfo.getAppName() + "服务Renewed");
	}

	
	@EventListener
	public void listen(EurekaRegistryAvailableEvent event) {
		Object source = event.getSource();
		System.err.println(source + "\r\n服务Available");
	}
}

传送门

  1. springcloud入门基础搭建之组件版本
  2. springcloud入门基础搭建之eureka
  3. springcloud入门基础搭建之ribbon
  4. springcloud入门基础搭建之feign
  5. springcloud入门基础搭建之hystrix
  6. springcloud入门基础搭建之zuul
  7. springcloud入门基础搭建之config
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值