几个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的负载均衡是由什么实现的?
spring微服务调用,没有注册中心也能用吗?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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.第一条已经解释过了;
希望能够帮到你...
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 4无用
悬赏问题
- ¥15 (标签-python)
- ¥15 第一个已完成,求第二个做法
- ¥20 搭建awx,试了很多版本都有错
- ¥15 java corba的客户端该如何指定使用本地某个固定IP去连接服务端?
- ¥15 activiti工作流问题,求解答
- ¥15 有人写过RPA后台管理系统么?
- ¥15 Bioage计算生物学年龄
- ¥20 如何将FPGA Alveo U50恢复原来出厂设置哇?
- ¥50 cocos2d-x lua 在mac上接入lua protobuf?
- ¥15 es 7.17.20版本生成时间戳