ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

四、Spring Cloud Alibaba项目,测试模块之生产者与消费者

2022-08-25 18:02:36  阅读:213  来源: 互联网

标签:String service spring nacos Alibaba 订单 Spring public Cloud


1、模块说明

生产者:service-order

消费者:service-user

说明:消费者user调用生产者order,调用订单服务

 

2、生产者

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>com.shiwn</groupId>
        <artifactId>spring-cloud-alibaba</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.shiwn</groupId>
    <artifactId>service-order</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-order</name>
    <description>生产者-订单服务</description>

    <dependencies>
        <!-- 公共依赖-->
        <dependency>
            <groupId>com.shiwn</groupId>
            <artifactId>service-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 配置文件

# 应用服务 WEB 访问端口
server.port=8030

# 应用名称(nacos会将应用名称当作服务名称)
spring.application.name=service-order

# nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=192.168.1.206:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

 controller

@RestController
@RequestMapping("/order")
public class OrderController {
    @Value("${server.port}")
    private String port;

    /**
     * 新增订单
     *
     * @return
     */
    @RequestMapping("/add")
    public String add() {
        System.out.println("新增订单成功");
        return "订单服务-新增订单成功 - 端口:" + port;
    }

    /**
     * 取消订单
     *
     * @return
     */
    @RequestMapping("/cancel")
    public String cancel() {
        System.out.println("取消订单成功");
        return "订单服务-取消订单成功 - 端口:" + port;
    }
}

 

3、消费者

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>com.shiwn</groupId>
        <artifactId>spring-cloud-alibaba</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.shiwn</groupId>
    <artifactId>service-user</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-user</name>
    <description>消费者-用户服务</description>

    <dependencies>
        <!-- 公共依赖-->
        <dependency>
            <groupId>com.shiwn</groupId>
            <artifactId>service-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 配置文件

# 应用服务 WEB 访问端口
server.port=8031

# 应用名称(nacos会将应用名称当作服务名称)
spring.application.name=service-user

# nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=192.168.1.206:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

 controller

@RestController
@RequestMapping("/user")
public class UserController {
    @Value("${server.port}")
    private String port;

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/addOrder")
    public String addOrder() {
        String url = "http://service-order/order/add";
        String apiReqResult = restTemplate.getForObject(url, String.class);
        return "用户服务-新增订单成功:" + apiReqResult;
    }

    @RequestMapping("/cancelOrder")
    public String cancelOrder() {
        String url = "http://service-order/order/cancel";
        String apiReqResult = restTemplate.getForObject(url, String.class);
        return "用户服务-取消订单成功:" + apiReqResult;
    }
}

RestTemplate配置

RestTemplate 是 Spring 对HttpClient 的封装,提供了一系列方便易用的 API。可直接使用微服务名称进行调用

@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced   //开启ribbon
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

 

4、更新父工程pom

    <modules>
        <module>service-nacos</module>
        <module>service-common</module>
        <module>service-order</module>
        <module>service-user</module>
    </modules>

 

5、多生产者

 使用ribbon的负载均衡进行多生产者测试。      

(1)在idea中复制服务

(2)填写参数(二选一)

// 方式一
VM options: -Dserver.port=8040
// 方式二
Program arguments: --server.port=8040

(3)启动服务,查看nacos

(4)调用测试

地址:

  http://ip:8031/user/addOrder

结果:

用户服务-新增订单成功:订单服务-新增订单成功 - 端口:8030
用户服务-新增订单成功:订单服务-新增订单成功 - 端口:8040
用户服务-新增订单成功:订单服务-新增订单成功 - 端口:8030
...
默认使用轮询算法

注:

  第一次调用时,可能会比较慢,因为要初始化ribbon的负载均衡器(懒加载)。

标签:String,service,spring,nacos,Alibaba,订单,Spring,public,Cloud
来源: https://www.cnblogs.com/shiblog/p/16624844.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有