berg369 2020-01-15 09:16 采纳率: 85.7%
浏览 3025
已采纳

spring微服务调用,没有注册中心也能用吗?

几个spring微服务的问题,请指教:

1、springboot开发用RestTemplate和feign方式,如果没有部署注册中心,也可以调用吧,也可以分布式部署微服务?那么很多场景下用户不需要对服务调用进行细粒度管控,是否可以不部署注册中心?

2、如果部署了注册中心如Eureka,是否所有controller都会被注册?注册中心会记录服务的调用情况包括日志等,那么正常从浏览器和APP发起的调用也会被记录吗?

3、服务提供者和消费者都要注册到注册中心,那么从浏览器和APP发起的调用应该没有注册消费者吧?这样注册中心的服务调用管理并不全面吧?是只包括微服务之间的调用吧?是否应只注册需要被其它微服务调用的controller而不是全部?

4、服务调用好像都是调用controller,能否调用其它微服务应用的service层?controller通常是为前端调用设计的,参数是DTO,而service的参数是DO|PO,在写业务时,可能更多使用后者。

5、用RestTemplate调用服务时,@LoadBalanced注解可实现负载均衡,如果没有部署注册中心,调用时直接写的服务方地址,怎么可能实现负载均衡呢?是否@LoadBalanced必须和注册中心一起用?没有注册中心的情况下如果一个微服务部署多个实例,我们是在nginx中配置集群的,调用地址就是集群的域名,即负载均衡是由nginx实现的,spring的负载均衡是由什么实现的?

  • 写回答

2条回答 默认 最新

  • little_how 2020-01-15 10:53
    关注

    1.可以,ribbon负责选择和路由微服务列表,当有注册中心时,eureka负责拉取注册中心的服务信息给到ribbon,当没有使用eureka时,如果使用了LoadBanlance的话,你配置的服务器地址(可以配置多个服务器list)可以被加载到ribbon,由ribbon来做路由;

    2.eureka注册的服务是ip和端口,也就是说你的所有该端口的controller都可能会被调用到,一般如果想要隔离某些controller才能被调用,可使用interceptor或者直接在nginx设置内网才能访问即可;区别是否内部服务调用,可以选在在feign调用时加入特定调用标识header即可;一般记录调用日志都是所有调用全链路记录的,不管来自于内网还是app;

    3.微服务只是承载着记录可用列表的ip和端口,便于容错以及路由等功能,实际上还是http的调用,所以一个服务可以注册到微服务,但是如果这个服务没有设置拦截以及只能内网访问,那么app也可以基于正确的http url和参数进行调用,本质上就是一个http请求;

    4.一般服务对象之间的传递都不建议直接使用po和do,因为po改变会直接影响依赖的服务,所以不管是基于controller还是service都尽量使用dto来进行服务间的对象传输,这样的好处是对外提供的服务更稳定,当你po更改时不至于影响到依赖服务的dto;刚刚3已经说了springcloud的调用实际上就是http,service在不经过dubbo等服务的代理的请款下是不可能直接对外提供http请求的,除非你选择使用dubbo,thrift这些微服务;

    5.第一条已经解释过了;

    希望能够帮到你...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理