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个回答

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、可以不需要注册中心,只要不需要服务发现等类似的服务治理的场景;
2、调用链路肯定是可以记录的,即便没有注册中心,在nginx上也能看到;
3、注册中心是负责管理和监控各个服务的,手机app、浏览器只是客户端,这里边的相关概念要先理解清楚;
4、基于http协议的rpc通信肯定都是调用controller层的,如果是基于其他协议的rpc,可以直接调用service层方法,如dubbo、grpc等等;
5、spring的负载均衡,应该是一种客户端负载均衡,即客户端维护了一个调用地址的列表,通过心跳的方式检测连接地址是否可用,然后在客户端选择其中的一个地址进行调用。nginx属于服务端负载均衡。

berg369
berg369 我用dobbo的api方式注册了部分service层接口服务,其它微服务调用时在dobbo控制台有记录,而从浏览器发起的,仅在nginx中有记录。springcloud也是这样吗?浏览器请求由nginx转发给服务直接返回了,注册中心会感知到吗?
6 个月之前 回复
berg369
berg369 --2、调用链路肯定是可以记录的,即便没有注册中心,在nginx上也能看到;
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问