Eureka调用远程服务demo

496 阅读2分钟

先起一个服务端

启动springboot加入依赖:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

配置yml

eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: true
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: true
    #设置服务注册中心的URL,用于client和server端交流
    service-url:
      defaultZone: http://localhost:8080/eureka/
  instance:
    hostname: localhost
    #配置元数据 标记一下这台服务器有什么用 可用自己自定义
    metadata-map.shit: caibi
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 3000
server:
  port: 8080
#这个必写ip+端口+服务
spring:
  application:
    name: Eureka

加入启动标志

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {

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

}

再启动一个provider

加入依赖

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

配置yml

eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: true
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: true
    #设置服务注册中心的URL,用于client和server端交流
    service-url:
      defaultZone: http://localhost:8080/eureka/

server:
  port: 8081

spring:
  application:
    name: Provider

提供服务

@RestController
public class MyController {
	@GetMapping("/getHi")
	public String getHi(){
		return "hi";
	}
}

启动springboot

写一个consumer调用服务

也是加入相同的依赖

配置yml

eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: true
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: true
    #设置服务注册中心的URL,用于client和server端交流
    service-url:
      defaultZone: http://eu1:8080/eureka/

server:
  port: 8082

spring:
  application:
    name: Consumer

  编写服务

用restTemplate去调用远程服务,我这变只是随便调用一个服务

@RestController
public class MyController {

	@Autowired
	EurekaClient client;

	@GetMapping("/client")
	public String get(){
		List<InstanceInfo> provider = client.getInstancesByVipAddress("PROVIDER", false);
		InstanceInfo info = provider.get(0);
		String forObject=null;
//		System.out.println(info);
		if (info.getStatus()!= InstanceInfo.InstanceStatus.DOWN){
			String url="http://"+info.getIPAddr()+":"+info.getPort()+"/getHi";
			RestTemplate restTemplate = new RestTemplate();
			 forObject = restTemplate.getForObject(url, String.class);

		}
		return forObject;
	}
}

结果

调用了8081的服务

image.png