多微服务合并为一个服务

公司微服务细分太多,最近跟我提说需要将几个微服务合为单体,经过几天的查阅,决定用二次打包的方式进行合并,然后部署的时候在nginx改下合并的微服务转发路劲即可,不需要前端修改路劲了。

方案

采用二次打包的方式进行合并,利用maven-dependency-plugin解压插件先将各微服务的jar包解压再用maven-assembly-plugin进行合并打包为一个jar包。

合并前问题处理

1、由于包合并时,相同的类会进行覆盖,会导致找不到类等,所以存在相同包下的相同类名作用不一致的话,需要调整下各服务的包名、类

2、类注册的bean的name相同时,会导致注册bean失败,所以需要调整各服务有相同bean的name,特别是@FeignClient的contextId,因为是以contextId作为bean的name。

3、重复扫描导致重复注册等,如@EnableJpaAuditing,重复扫描,导致重复注册jpaAuditingHandler,所以在有用到@EnableJpaAuditing的类上也加上@ConditionalOnMissingBean(name="jpaAuditingHandler")条件,已经注册过的,就不需要再注册了

4、因为每个微服务都有yml配置文件,所以需要写个合并适配器,将每个微服务的yml合并一起,后续会另外开篇文件细说yml的合并。

合并步骤和代码

1、pom文件添加需要合并的微服务依赖


    UTF-8
    UTF-8
    6.1.0
    6.1.0
    6.1.0

//需要整合的微服务包,type、scope需填写正确,其中groupId、artifactId、version按需填写即可
    
        com.lfq.module1
        module1
        ${module1.version}
        jar
        provided
    
    
        com.lf1.module2
        module2
        ${module2.version}
        jar
        provided
    
    
        com.lf1.module3
        module3
        ${module3.version}
        jar
        provided
    

2、pom文件添加解压插件,将微服务解压到指定目录下


    org.apache.maven.plugins
    maven-dependency-plugin
    
        
            unpack-classes
            package
            
                unpack
            
            
                
                    
                        com.lfq.module1
                        module1
                        ${project.build.directory}/work/addpack/module1
                    
                    
                        com.lfq.module2
                        module2
                        ${project.build.directory}/work/addpack/module2
                    
                    
                        com.lfq.module3
                        module3
                        ${project.build.directory}/work/addpack/module3
                    
                
            
        
    

3、pom文件添加合并打包插件,将解压目录下的文件和本工程代码合并打包


    org.apache.maven.plugins
    maven-assembly-plugin
    3.3.0
    
        false
    
    
        
            make-assembly
            package
            
                single
            
            
                

                    
                        ${project.build.directory}/work/addpack/module1/META-INF/MANIFEST.MF
                    
                
                
                    assembly.xml   
                
            
        
    


4、添加assembly.xml文件描述合并打包



   lfq
   
      
      jar
   
   false

   
      
      
         ${project.build.directory}/classes
         BOOT-INF/classes
      

      
      
         ${project.build.directory}/work/addpack/module1
         .

         
            **/DbDataController.class
         
      
      
         ${project.build.directory}/work/addpack/module2
         .

         
            **/application.yml
         
      
      
         ${project.build.directory}/work/addpack/module3
         .
      
   


   
      
         yml-merge
         
            .*/application.yml
            BOOT-INF/classes/application.yml
         
      
   
   
   
      
         false
         false
         BOOT-INF/lib
      
   

后续执行clean install 即可得到一个jar包。

你可能感兴趣的:(微服务,单体工程)