源码地址

springboot2教程系列

基本配置

1、pom中添加依赖
<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-netflix-eureka-server</artifactId>
</dependency>
2、添加启动代码中添加@EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
	public static void main(String[] args){
	    System.setProperty("spring.profiles.active","server1");
        SpringApplication app = new SpringApplication(EurekaServerApplication.class);
        app.run(args);
    }
}
3、配置文件
spring.application.name: spring-cloud-eureka
server.port: 8001
spring.profiles: server1
#eureka的client注册到server时默认是使用hostname而不是ip,需要使用ip来服务到eureka-server上,需要在eureka的client增加配置如下:
#eureka.instance.prefer-ip-address: true
eureka.instance.instance-id: 10.10.2.60:${server.port}
#表示是否将自己注册到Eureka Server,默认为true
#eureka.client.register-with-eureka: false
#表示是否从Eureka Server获取注册信息,默认为true
eureka.client.fetch-registry: false

启动工程后,访问:http://127.0.0.1:8001/ 的注册界面

集群

双节点注册中心
1、项目的配置文件application.yml
spring.application.name: spring-cloud-eureka
server.port: 8001
spring.profiles: server1
#eureka的client注册到server时默认是使用hostname而不是ip,需要使用ip来服务到eureka-server上,需要在eureka的client增加配置如下:
eureka.instance.instance-id: 10.10.2.60:${server.port}
#表示是否将自己注册到Eureka Server,默认为true
#eureka.client.register-with-eureka: false
#表示是否从Eureka Server获取注册信息,默认为true
eureka.client.fetch-registry: false
#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka  多个地址可使用 , 分隔
eureka.client.serviceUrl.defaultZone: http://10.10.2.60:8002/eureka/

---
spring.application.name: spring-cloud-eureka
spring.profiles: server2
server.port: 8002
eureka.instance.instance-id: 10.10.2.60:${server.port}
eureka.client.serviceUrl.defaultZone: http://10.10.2.60:8001/eureka/
2、添加启动类EurekaServer2Application
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer2Application {
	public static void main(String[] args){
	    System.setProperty("spring.profiles.active","server2");
        SpringApplication app = new SpringApplication(EurekaServer2Application.class);
        app.run(args);
    }

}
eureka集群使用

生产中我们可能需要三台或者大于三台的注册中心来保证服务的稳定性,配置的原理其实都一样,将注册中心分别指向其它的注册中心。这里只介绍三台集群的配置情况,其实和双节点的注册中心类似,每台注册中心分别又指向其它两个节点即可,使用application.yml来配置 。

配置跟双节点配置差不多,只添加多一个节目,serviceUrl指向其它节点

服务提供与调用

服务提供
1、pom包配置
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、配置文件

添加配置到applictaion.yml

---
#生产者
spring.application.name: spring-cloud-producer
server.port: 9001
spring.profiles: producer
eureka.client.serviceUrl.defaultZone: http://127.0.0.1:8002/eureka/,http://127.0.0.1:8001/eureka/
3、启动类

启动类中添加@EnableDiscoveryClient注解 ,添加@EnableDiscoveryClient注解后,项目就具有了服务注册的功能

@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication {

    public static void main(String[] args){
        System.setProperty("spring.profiles.active","producer");
        SpringApplication app = new SpringApplication(ProducerApplication.class);
        app.run(args);
    }
}
4、controller
@RestController
@RequestMapping("/producer")
public class ProducerController {

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

    @RequestMapping("/hello")
    public String index(@RequestParam String name) {
        return "hello "+name+",this is first messge,port:"+port;
    }
}
服务调用
1、pom包配置
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、配置文件

添加配置到applictaion.yml

---
#消费者
spring.application.name: spring-cloud-consumer
spring.profiles: consumer
server.port: 9002
eureka.client.serviceUrl.defaultZone: http://127.0.0.1:8002/eureka/,http://127.0.0.1:8001/eureka/
3、启动类

启动类添加@EnableDiscoveryClient@EnableFeignClients注解。

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {

    public static void main(String[] args){
        System.setProperty("spring.profiles.active","consumer");
        SpringApplication app = new SpringApplication(ConsumerApplication.class);
        app.run(args);
    }
}
  • @EnableDiscoveryClient :启用服务注册与发现
  • @EnableFeignClients:启用feign进行远程调用
4、feign调用实现
@FeignClient(name= "spring-cloud-producer")
public interface HelloRemote {

    @RequestMapping(value = "/producer/hello")
    public String hello(@RequestParam(value = "name") String name);

}
5、web层调用远程服务
@RestController
@RequestMapping("/comsumer")
public class ConsumerController {

    @Autowired
    HelloRemote helloRemote;

    @RequestMapping("/hello/{name}")
    public String index(@PathVariable("name") String name) {
        return helloRemote.hello(name);
    }
}
测试

访问:http://127.0.0.1:9002/comsumer/hello/tom

返回:hello tom,this is first messge,port:9001

负载均衡

以上面spring-cloud-producer为例子修改 ,添加启动类Producer2Application,配置文件如下

---
#生产者2
spring.application.name: spring-cloud-producer
server.port: 9003
spring.profiles: producer2
eureka.client.serviceUrl.defaultZone: http://127.0.0.1:8002/eureka/,http://127.0.0.1:8001/eureka/

启动项目

然后在浏览器再次输入:http://127.0.0.1:9002/comsumer/hello/tom 进行测试:

第一次返回结果:hello tom,this is first messge,port:9001

第二次返回结果:hello tom,this is first messge,port:9003

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐