springcloud中入门使用Eureka(server,client)+ribbon

首先需要建立一个spring boot项目

在使用eureka前,先将服务端的jar通过maven导入到项目中

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

然后配置服务端在application.yml中

server.port: 80

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:80/eureka/

再通过spring boot的启动类中加上@EnableEnrekaServer服务器端就完成了。

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaServerApplication {

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

访问http://localhost/就可以查看主界面。在没有客户端的情况下Instances currently registered with Eureka中的内容是空的,本人发上来的是有客户端。

新建一个springboot项目作为客户端。

然后配置客户端需要先导入jar,客户端使用client或server都行,但是server的功能要多些。

本项目用于访问建立好后的ribbon,可以得到最后追加内容中的效果。

client

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

这是server

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

配置客户端的基本信息application.properties

spring.application.name=ribbon-consumer
server.port=8080
eureka.client.service-url.defaultZone= http://localhost:80/eureka/

然后在启动类加上@EnableDiscoveryClient。

本客户端使用ribbon负载均匀功能,如果不用负载均匀功能去掉@LoadBalanced标签。

@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan("com.自己包名.controller")
public class SpringCloudRibbonApplication {

	@Bean
//	负载功能
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}
	
	public static void main(String[] args) {
		SpringApplication.run(SpringCloudRibbonApplication.class, args);
	}
}

然后写上controller来测试一下,启动客户端项目后,在server的Instances currently registered with Eureka中会多一项名为ribbon-consumer的注册信息。

在controller中的resttemplate是用来访问其它服务器的项目名称加上requestmapping地址,后面是返回类型,相当于本服务器在很多人访问的使用,做个判断,让服务器自己把一些请求负载拿给其它服务器,从而降底当前服务器的压力。

@Controller
public class EurekaController {

	Logger logger= LoggerFactory.getLogger(getClass());
	
	@Autowired
	RestTemplate restTemplate;
	
	@RequestMapping("/index")
	@ResponseBody
	public Object index() {
		logger.info("我是ribbon种的服务正在被访问中……");
//		填写第一个参数为其它Eureka服务器的项目名,也可以自己指定项目名,第二个是返回类型
		return restTemplate.getForObject("http://eureka-ribbon/index", String.class);
	}
	
}

为了测试ribbon的功能,再建立的一个客户端服务器(springboot项目)。

客户端导入jar或服务端jar,两者都行

<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-netflix-eureka-server</artifactId>
		</dependency>

配置application.properties

eureka.client.service-url.defaultZone=http://localhost:80/eureka/
server.port=8090
spring.application.name=eureka-ribbon

启动类和前面一个项目相同。

@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan("com.自己报名.controller")
public class SpringCloudEurekaRibbonTestApplication {

	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}
	
	public static void main(String[] args) {
		SpringApplication.run(SpringCloudEurekaRibbonTestApplication.class, args);
	}
}

写上本项目的controller

@Controller
public class EurekaController {

	Logger logger= LoggerFactory.getLogger(getClass());
	
	@Autowired
	RestTemplate restTemplate;
	
	@RequestMapping("/index")
	@ResponseBody
	public Object index() {
		logger.info("我是eureka-ribbon的服务正在被访问中……");
		return "hello!!eurekaAndRibbon!!";
	}
	
}

最后将三个项目全都启动,访问http://localhost/效果如下:

有上面的两排红字是因为eureka进入了保护模式,在保护模式下不会踢出注册了的客户端服务器。

访问http://localhost:8080/index效果如下:

访问第一个客户端服务器的index时自动跳转到第二个客户端服务器的index上了,第一个服务器打印日志如下:

第二个服务器打印日志如下:

其它功能正在学习发现当中。

追加内容:

ribbon开启负载均衡后, 如果想知道运行效果需要建立两个eureka的客户端,并且两个项目中的spring.application.name都为eureka-ribbon,除了端口不一样,端口一样无法启动,两个客户端的功能可以有差异,其它配置和上面相同。

eureka.client.service-url.defaultZone=http://localhost:80/eureka/
server.port=8090
spring.application.name=eureka-ribbon
eureka.client.service-url.defaultZone=http://localhost:80/eureka/
server.port=8091
spring.application.name=eureka-ribbon

两个相同的客户端启动后在eureka的server上可以看到两个相同的客户端。

两个项目都建立地址 /index

然后访问开启ribbon功能的eureka客户端的地址

得到如下结果:

最后再看看日志中的内容:

首先请求localhost:8080/index的日志。

然后是eureka-ribbon项目名称下的日志:

可以看出在不断访问的过程中,会在两个项目中都访问,达到负载均衡。

如果自己觉得想自定义ribbon可以通过@RibbonClient(name="eureka-ribbon",configuration=RibbonConfiguration.class)标签来实现自定义,但是有个要求是不能让@ComponentScan扫描到,放在不能被@ComponentScan扫描到的包下面,不然会重叠出问题。如下面所示:

@Configuration
public class RibbonConfiguration {

	@Autowired
	IClientConfig setting;
	
	@Bean
	public IRule ribbonRule(IClientConfig setting) {
		return new RandomRule();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_33868430/article/details/81364896