在Spring Cloud中集成了Eureka,因此可以在Spring Boot项目中使用Eureka的分布式服务,在本例中我们模拟Eureka的伪分布式的使用,端口分别为8761(默认),8762,8763,同时也需要修改host文件,指定为:
127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3
1、在Spring Cloud中启用Eureka,需在pom文件中加入以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
2、接下来需要修改项目的配置文件,因模拟三个节点,也就需要三个配置文件,其中只是端口号、hostname的指定有所不同,application-s1.yml具体配置如下:
server:
port: 8761
spring:
application:
name: EurekaServer
eureka:
instance:
hostname: peer1 #对应的hostname
client:
service-url:
defaultZone: #三个服务节点互联
http://peer1:8761/eureka/,http://peer2:8762/eureka/,http://peer3:8763/eureka/
application-s2.yml,application-s3.yml中修改对应端口与hostname即可
3、mani函数中加入Eureka服务注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApp {
public static void main(String\[\] args) {
SpringApplication.run(EurekaServerApp.class, args);
}
}
4、使用maven打包,生成可运行的jar文件,执行以下命令
spring-cloud>java -jar eureka-server\target\eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=s1
spring-cloud>java -jar eureka-server\target\eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=s2
spring-cloud>java -jar eureka-server\target\eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=s3
启动时会报 Connect to peer3:8763 timed out之类的异常,待服务全启动后控制台窗口出现2017-04-12 16:46:14.991 INFO 13132 --- [nio-8761-exec-6] c.n.e.registry.AbstractInstanceRegistry : Registered instance EUREKASERVER/..*.144:EurekaServer:8
763 with status UP (replication=true),说明服务已启动成功,打开http://localhost:8761/,可以看到集群运行正常
注:在配置文件中如果不使用域名的方式,而指定localhost或者ip(127.0.0.1/外网ip),服务能够正常启动,但分片服务总显示在unavailable-replicas中,因此在host中指定了相应的域名做服务区分
5、添加对外服务接口,新建一个controller,并打印出当前调用服务的信息
@RestController
public class AppServiceController {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private DiscoveryClient client;
@SuppressWarnings("deprecation")
@RequestMapping("/hello/{user}")
public String hello(@PathVariable("user") String user) {
ServiceInstance instance = client.getLocalServiceInstance();
logger.info("/add, host:" + instance.getHost() + ", port: " + instance.getPort() + ", service_id:"
\+ instance.getServiceId() + ", user:" + user);
return "Hello " + user;
}
}
6、新建客户端调用工程,在工程中访问Eureka集群提供的rest服务,该工程是一个普通的Spring Boot项目,pom中添加以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
7、配置文件中将该工程注册属性设置为false,不在Eureka集群中注册
spring:
application:
name: eureka-client
eureka:
client:
register-with-eureka: false
server:
name: eurekaServer
8、客户端的主类中通过服务名访问Eureka集群,默认负载均衡策略为轮询
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class EurekaClientApp {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@Value("${eureka.server.name}")
private String eurekaServer;
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/{user}")
public String hello(@PathVariable("user") String user) {
return restTemplate.getForEntity("http://" +eurekaServer +"/hello/"+ user, String.class).getBody();
}
public static void main(String\[\] args) {
SpringApplication.run(EurekaClientApp.class, args);
}
}
9、访问http://localhost:8080/tom,页面打印 Hello tom,可以变换参数,在服务端显示访问的日志信息
2017-04-12 18:12:31.888 INFO 13088 --- [nio-8762-exec-3] org.eureka.server.AppServiceController : /add, host:peer2, port: 8762, service_id:EurekaServer, user:tom
2017-04-12 18:13:03.310 INFO 6448 --- [nio-8763-exec-2] org.eureka.server.AppServiceController :
/add, host:peer3, port: 8763, service_id:EurekaServer, user:jack
2017-04-12 18:13:24.342 INFO 12992 --- [nio-8761-exec-6] org.eureka.server.AppServiceController : /add, host:peer1, port: 8761, service_id:EurekaServer, user:anny
访问三次,可以看到服务端分别被访问一次,使用了轮询策略
项目代码地址:https://github.com/hjguang/spring-cloud
该项目中包含其他工程,可以使用以下命令只install Eureka项目
spring-cloud>mvn install -pl eureka-server,eureka-client -DskipTests=true
Original url: Access
Created at: 2019-04-22 11:15:41
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论