一、创建服务提供者service-hi
1、创建子项目的方法类似eureka,略
2、修改pom文件,主要是添加jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.landcode</groupId> <artifactId>land</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>land-service-hi</artifactId> <dependencies> <dependency> <groupId>com.landcode</groupId> <artifactId>land-common</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>
<!-- 引入eureka jar包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <build> <finalName>land-service-hi</finalName> // jar包名 <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <!-- 打包成可执行jar包 --> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>utf-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
3、resource目录下添加配置文件application.yml
server:
port: 8855
spring:
application:
name: service-hi
eureka:
instance:
prefer-ip-address: true #开启显示IP地址
instance-id: ${spring.cloud.client.ip-address}:${server.port} #eureka页面显示IP地址:端口号
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
4、新建启动类,注意加上@EnableEurekaClient 注解,到eureka 注册服务
@SpringBootApplication @EnableEurekaClient public class HiApplication { public static void main(String[] args) { SpringApplication.run(HiApplication.class, args); } }
5、新建一个测试controller,方便服务调用方测试。测试功能中会返回服务方的端口号,方便做负载均衡测试
@RestController public class HiController { @Value("${server.port}") private String port; @RequestMapping(value = "/hi") public String hi() { return "hi " + port; // 返回端口号,方便负载均衡功能测试 } }
二、创建服务消费方service-consumer
1、新建子项目service-consumer 作为服务调用方,方法类似eureka(略),修改pom文件,添加eureka、openfeign的jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.landcode</groupId> <artifactId>land</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>land-service-consumer</artifactId> <dependencies> <dependency> <groupId>com.landcode</groupId> <artifactId>land-common</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <build> <finalName>land-service-consumer</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <!-- 打包成可执行jar包 --> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>utf-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
2、resource目录添加项目配置文件application.yml
server:
port: 8866
spring:
application:
name: service-consumer
eureka:
instance:
prefer-ip-address: true #开启显示IP地址
instance-id: ${spring.cloud.client.ip-address}:${server.port} #eureka页面显示IP地址:端口号
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
3、添加项目启动类,@EnableFeignClients 表示使用feign调用服务接口,Ribbonclient 注解表示采用ribbon做负载均衡,configuration = RibbonConfig.class, RibbonConfig 是Ribbon 负载均衡机制配置类
@SpringBootApplication @EnableEurekaClient @EnableFeignClients(basePackages = { "com.landcode.service.consumer.service" }) @RibbonClient(name = "service-hi", configuration = RibbonConfig.class ) public class ConsumerApplication { public static void main(String[] args) { // TODO Auto-generated method stub SpringApplication.run(ConsumerApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
4、RibbonConfig配置类,指定使用某种负载均衡策略
@Configuration public class RibbonConfig { @Resource IClientConfig clientConfig; @Bean public IRule ribbonRule(IClientConfig clientConfig) { // return new RandomRule(); //随机选择策略 return new WeightedResponseTimeRule(); } }
5、新建service,调用服务service-hi,会自动采用ribbon的负载均衡策略
@FeignClient(value = "service-hi") public interface ITestHi { @RequestMapping("/hi") public String testHi(); }
6、新建测试 controller,测试服务调用和负载均衡。这里注意:如果ITestHi还有实现类bean的话,注入时注意通过name区分
@RestController public class TestHiController { @Autowired private ITestHi testHi; @RequestMapping("/consumer/hi") public String testHi() { return testHi.testHi(); } }
三、测试
12、启动eureka,启动几个service-hi服务(只需修改为不同端口号),启动service-consumer服务,打开浏览器输入http://192.168.0.3:8866/consumer/hi 调用服务消费测试接口,可以看见每次调用打印了服务提供方不同的端口号。
页面分别打印:hi 8855、hi 8856、hi 8856、hi 8857、hi 8856、hi 8855、hi 8857
所有评论(0)