微服务Nacos,Feign的配置使用

配置环境

父目录
<dependencyManagement>
    <dependencies>
        <!--Spring Cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

子目录
<!--熔断器  hystrix依赖,主要是用  @HystrixCommand -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!--服务注册-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置了两个module 具体如下
# 服务端口
server.port=8003
# 服务名
spring.application.name=service-ucenter
# 端口号
server.port=8004
# 服务名称
spring.application.name=service-message

Nacos注册

在两个模块的启动类上 都加上

@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。 @GetMapping注解用于对被调用的微服务进行地址映射。

@SpringBootApplication
@MapperScan("com.xxx.kpopcenter.mapper")
@EnableDiscoveryClient //nacos注册启动    nacos用来注册
@EnableFeignClients //feign启动  feign用来调用
public class UcenterMemberApplication {
    public static void main(String[] args) {
        SpringApplication.run(UcenterMemberApplication.class,args);
    }
}

此时访问http://localhost:8848/nacos  账号密码都是nacos

发现两个服务都已经在nacos中注册  之后就可以通过feign来调用另一个模块里面的方法

Feign 方法调用

1.被调用模块

只需要正确的写出对应的方法和api

// 给feign调用 根据memberId返回member信息


@GetMapping("getMemberInfoById/{memberId}")
public Map<String,String> getMemberMapInfoById(@PathVariable String memberId){
    UcenterMember member = memberService.getById(memberId);
    Map<String,String> membermap = new HashMap<>();
    membermap.put("memberId",member.getId());
    membermap.put("nickname",member.getNickname());
    membermap.put("avatar",member.getAvatar());
    return membermap;
}

2.调用模块

@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致

@PathVariable注解一定要指定参数名称,否则出错

@Component注解防止,在其他位置注入CodClient时idea报错

@GetMapping注解用于对被调用的微服务进行地址映射      地址一定要写全

Feign类编写   fallback就是配置熔断器(熔断器也可以不写)
@Component
@FeignClient(value = "service-ucenter",fallback = MemberDegradedFeignClient.class)
public interface MemberClient {

    // 调用nacos服务中的service-ucenter中的方法  根据memberId获取member信息
    @GetMapping("/usercenter/member/getMemberInfoById/{memberId}")
    public Map<String,String> getMemberMapInfoById(@PathVariable("memberId")                                                         String memberId);
}

熔断器编写  就是为了防止调用的方法出现问题

@Component
public class MemberDegradedFeignClient implements MemberClient{
    @Override
    public Map<String, String> getMemberMapInfoById(String memberId) {
        System.out.println("time out");
        return null;
    }
}

最后方法的调用

@Autowired
private MemberClient memberClient;  就可以使用里面的方法了

  • 32
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值