在经过项目经常性的修改,以及需求,上线规划没有规范流程,并且同一套项目多地使用,而各地存在差异化使用的情况下,似乎将系统拆分变的优势明显.
在传统的三层架构拆分之后,在实际业务中,业务,服务的拆分反而变的对开发更有益处,项目的更新没有合理规划时,如果能做到服务化的更新会方便很多,加上服务化之后开发的解耦,看上去很使用微服务架构.
但是,对已有项目的改造却是一个很难下定决心进行的工作.
主流微服务框架: dubbo springCloud
比较而言,springCloud 对于已有项目改造难度较大.首先需将项目整理为springboot项目,对于一个已经在线上运行近一年的项目而言,改动地方过多,而且,将原始的配置文件修改为springboot的方式对于大部分人来说没有配置xml来的娴熟,加上可查文档较少,推进难度大.就使用而言,springCloud化的接口在服务调用过程中可完全与调用传统service一致,对于接口调用而言使用很方便,加上springboot的jar包部署方式,在拆分多个微服务之后的部署工作变的方便.
比较而言,将一个已有项目使用dubbo拆分较springCloud改造简单,dubbo项目本身阔别许久的更新也让大家不再陷入阿里已经抛弃这个项目的疑虑.同时,在一个没有完整发布体系的线上环境中,拆分之后的发布共工作变的复杂,需要更多的环境维护,加上本身接口的调用,与springCloud相比各有优缺.
对于项目的部署,docker的方式在传统用户的接受度较低,基本不愿意抛弃自己已有的服务器环境.
记录下springCloud的服务注册发现过程:
1.创建Eureka服务
xml项目配置如下(test)
server:
port: 8761
eureka:
instance:
hostname: 127.0.0.1
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
添加
@EnableEurekaServer 注解 .
启动
访问 http://localhost:8761/ 进入Eureka
2. 客户端
xml 如下 :
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/
server:
port: 8763
spring:
application:
name: clint
添加
@EnableEurekaClient 注解 .
加一段测试代码
@Value ("${server.port}") String port; @RequestMapping ("/hi") public String home(@RequestParam String name) { return "hi "+name+",i am from port:" +port; }
启动 ,刷新 http://localhost:8761/
3.服务调用者 (使用feign方式)
xml 如下 :
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/
server:
port: 8764
spring:
application:
name: service-ribbon
添加 注解
@EnableDiscoveryClient
@EnableFeignClients
暴露方法
@Autowired HelloRemote helloRemote; @RequestMapping(value = "/hi",method = RequestMethod.GET) public String sayHi(@RequestParam String name){ return helloRemote.sayHiFromClientOne(name); }
远程调用
@Component @FeignClient(value = "clint") public interface HelloRemote { @RequestMapping (value = "/hi",method = RequestMethod.GET) String sayHiFromClientOne(@RequestParam (value = "name") String name); }
访问服务调用者 http://localhost:8764/hi?name=hi 显示 hi hi,i am from port:8763
实际消息来源 8763