Spring Cloud(微服务)学习篇(四)

该文章介绍了如何在SpringCloud环境中通过Nacos实现服务间传递参数。首先创建了SmsDTO类,然后将其复制到服务中,更新SmsController和SmsService接口以接收参数。接着展示了如何在UserController中调用这个带参数的服务并进行测试。
摘要由CSDN通过智能技术生成

Spring Cloud(微服务)学习篇(四)

1.nacos实现服务之间传参数

1.1 在dto包(shop-sms-api项目)中创建SmsDTO类

package com.zlz.shop.sms.api.dto;

import lombok.Data;

@Data
public class SmsDTO {
    private String tel;
}

1.2 复制SmsDTO类到shop-sms-server项目的dto包下面

在这里插入图片描述

1.3 更新SmsController类

1.3.1 加入如下代码
  //演示传参数
    @RequestMapping("send2")
    public String send2(@RequestBody SmsDTO dto){
        log.info("执行短信发送  本次程序端口:{},发送的号码是:{}",port,dto.getTel());
        return "执行短信发送  本次程序端口:{}"+port;
    }
1.3.2 完整的smsController类代码
package com.zlz.controller;

import com.zlz.dto.SmsDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class SmsController {
    @Value("${server.port}")
    private String port;
    @RequestMapping("send")
    public String send(){
        /*其中{}是输入后面就port的,里面可以有多个*/
        log.info("执行短信发送  本次程序端口:{}",port);
        return "执行短信发送  本次程序端口:{}"+port;
    }
    //演示传参数
    @RequestMapping("send2")
    public String send2(@RequestBody SmsDTO dto){
        log.info("执行短信发送  本次程序端口:{},发送的号码是:{}",port,dto.getTel());
        return "执行短信发送  本次程序端口:{}"+port;
    }
}

1.4 更新SmsService接口

1.4.1 加入的代码
@RequestMapping("send2")
//可以不写requsestBody
String send2(SmsDTO dto);
1.4.2 完整的SmsService接口代码
package com.zlz.shop.sms.api.service;
import com.zlz.shop.sms.api.dto.SmsDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

//一个服务对应一个接口,api是给别人的
@FeignClient("shop-sms") //填写注册中心微服务的名称,这里与application中的yml文件(server那里的)中的application.name名字一致
public interface SmsService {
    //根据定义的控制器方法来写接口,和server里面的SmsController是保持一致的
    @RequestMapping("send")
    String send();
    @RequestMapping("send2")
   //可以不写requsestBody
    String send2(SmsDTO dto);
}

1.5 对shop-sms-api项目再次打包(install),因为里面数据变动了

1.5.1 双击install按钮

在这里插入图片描述

1.5.2 打包成功后的界面

在这里插入图片描述

1.6 启动端口号为8021的短信服务

在这里插入图片描述

1.7 更新UserController类

1.7.1 加入的代码
 @RequestMapping("test3")
    public String t3(String tel){
        SmsDTO smsDTO = new SmsDTO();
        smsDTO.setTel(tel);
        String s=smsService.send2(smsDTO);
        return "用户服务调用短信服务 结果:"+s;
    }
1.7.2 完整的UserController类代码
package com.zlz.controller;

import com.zlz.shop.sms.api.dto.SmsDTO;
import com.zlz.shop.sms.api.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class UserController {
    @Autowired
    RestTemplate restTemplate;
    @RequestMapping("test")
    public String t(){
        //http://shop-sms/send
        String s=restTemplate.postForObject("http://shop-sms/send", null, String.class);
//        String s=restTemplate.postForObject("http://127.0.0.1:8021/send", null, String.class);
        return "用户服务调用短信服务 结果:"+s;
    }
    //使用oepnFeign的方式发送短信
    @Autowired
    SmsService smsService;
    @RequestMapping("test2")
    public String t2(){
        //http://shop-sms/send
        String s=smsService.send();
        return "用户服务调用短信服务 结果:"+s;
    }
    @RequestMapping("test3")
    public String t3(String tel){
        SmsDTO smsDTO = new SmsDTO();
        smsDTO.setTel(tel);
        String s=smsService.send2(smsDTO);
        return "用户服务调用短信服务 结果:"+s;
    }
}

1.8 测试

1.8.1 启动用户服务

在这里插入图片描述

1.8.2 访问127.0.0.1:8010/test3后的界面

在这里插入图片描述

1.8.3 访问127.0.0.1:8010/test3后,控制台(短信服务)的打印信息

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值