上节课我们搭建了一个服务中心,这次课我们来看下如何搭建生产者和消费者模块,并实现简单的负载均衡。
一、创建生产者模块 springclouddemo-provider
在父工程上右键,新建一个module:springclouddemo-provider1
1、springclouddemo-provider1模块的pom文件:
<? xml version="1.0" encoding="UTF-8" ?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.wanmait</groupId> <artifactId>cloud-provider1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloud-provider1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> <spring-cloud.version>2021.0.0</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、springclouddemo-provider1模块的配置文件application.properties:
要在配置文件中声了服务注册中心的地址
spring.application.name=provider server.port=8002 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
3、springclouddemo-provider1模块的启动类:
添加注解:@EnableEurekaClient来声明这是一个client(生产者或者消费者,在这里是生产者)
@SpringBootApplication @EnableEurekaClient //Eureka 客户端 public class CloudProvider1Application { public static void main(String[] args) { SpringApplication. run (CloudProvider1Application.class, args); } }
4、创建一个控制器UserController,用来提供测试用的API
代码如下:
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/sayHello") public String sayHello(){ return "我是provider1"; } }
5、springclouddemo-provider1结构如下:
6、启动springclouddemo-provider1模块
7、在浏览器访问或者刷新:http://localhost:8761,在eureka服务注册发现中心查看生产者服务是否已被发现注册
注册成功如下:
二、创建消费者模块 springclouddemo-consumer
在父工程上右键,新建一个module:springclouddemo-consumer
1、springclouddemo-consumer模块的pom文件:
<? xml version="1.0" encoding="UTF-8" ?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.wanmait</groupId> <artifactId>cloud-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloud-consumer</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> <spring-cloud.version>2021.0.0</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、springclouddemo-consumer模块的application.properties配置文件:
要在配置文件中声了服务注册中心的地址
server.port=8001 spring.application.name=consumer eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
3、springclouddemo-consumer模块的启动类:
添加注解:@EnableEurekaClient来声明这是一个client(生产者或者消费者,在这里是消费者)
@SpringBootApplication @EnableEurekaClient //Eureka 客户端 public class CloudConsumerApplication { public static void main(String[] args) { SpringApplication. run (CloudConsumerApplication.class, args); } @Bean @LoadBalanced // 可以通过服务名访问 public RestTemplate restTemplate(){ return new RestTemplate(); } }
4、创建一个控制器HelloController,对外提供测试API
代码如下:
@RestController public class HelloController { @Resource RestTemplate restTemplate; @RequestMapping("/hello") public String hello(){ String url="http://provider/user/sayHello"; return restTemplate.getForObject(url,String.class); } }
5、springclouddemo-consumer模块结构如下:
6、启动springclouddemo-consumer模块
7、在浏览器访问或者刷新:http://localhost:8761,在eureka服务注册发现中心查看消费者服务是否已被发现注册
注册成功如下:
三、测试
在地址栏直接访问消费者地址,http://localhost:8001/hello,成功调用到 springclouddemo-provider1提供的接口并返回结果!
四、创建多个生产者,来测试负载均衡
1、再次创建一个生产者模块springclouddemo-provider2,创建方式和springclouddemo-provider1相同
注意端口号不能和springclouddemo-provider1重复,我们把端口号修改为8003
spring.application.name=provider server.port=8003 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
2、然后启动第二个生产者模块
3、访问服务注册中心http://localhost:8761,可以看到两个生产者都上线了
4、在浏览器中重复访问网址:http://localhost:8001/hello,会发现返回结果在两个生产者中切换,实现了负载均衡。
至此,消费者和生产者模块搭建并测试完成。
0条评论
点击登录参与评论