上节课我们搭建了一个服务中心,这次课我们来看下如何搭建生产者和消费者模块,并实现简单的负载均衡。
一、创建生产者模块 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条评论
点击登录参与评论