栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

分布式技术之dubbo二

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分布式技术之dubbo二

1,课程回顾
2,本章重点
父子工程的使用,子工程相互调用
springboot+mybatis+dubbo+zookeeper+mysql
部署一个dubbo_admin治理项目(可以对提供者和消费者进行管理)
dubbo负载均衡功能
3,具体内容
3.1 springboot,mybatis整合dubbo
3.1.1创建父项目(springboot+mybatis方式创建),pom.xml引入jar:


  
    org.springframework.boot
    spring-boot-starter-parent
    2.5.7
     
  
 


org.springframework.boot
spring-boot-starter-web



org.projectlombok
lombok
true



com.alibaba.spring.boot
dubbo-spring-boot-starter
2.0.0



com.101tec
zkclient
0.10
	     

3.1.2 创建子项目common
创建公共的实体类和服务层接口
3.1.3创建子项目consumer

 pom.xml
           
            com.aaa
            common
            0.0.1-SNAPSHOT
        

新建启动类并加入dubbo支持:

package com.aaa.pc;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubboConfiguration  //开启dubbo配置
public class PowerConsumerApplication {
    public static void main(String[] args) {
        //run方法
        SpringApplication.run(PowerConsumerApplication.class,args);
    }
}

编写controller,引入Service:

@Reference(check=false)
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check=“true”.
可以通过 check=“false” 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

package com.aaa.pc.controller;
import com.aaa.common.controller.BaseController;
import com.aaa.common.entity.Menu;
import com.aaa.common.service.MenuService;
import com.aaa.common.util.Result;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;

@RestController
@RequestMapping("menu")
public class MenuController extends BaseController {
    
    @Reference(check = false)   //没有配置文件,直接使用引用注解
    private MenuService menuService;
    
    @GetMapping("selectOne")
    public Result selectOne(Integer id) {
        return this.success(this.menuService.queryById(id));
    }

    
    @PutMapping("add")
    public Result add(@RequestBody Menu menu) {
        return this.success(this.menuService.insert(menu));
    }
    
    @PutMapping("update")
    public Result update(@RequestBody Menu menu) {
        return this.success(this.menuService.update(menu));
    }
    
    @DeleteMapping("deleteById")
    public Result deleteById(Integer id) {
        return this.success(this.menuService.deleteById(id));
    }
}
application.properties:
#访问端口号
server.port=18090
#dubbo - customer名称
spring.dubbo.application.name=power_customer
zookeeper 注册中心

spring.dubbo.registry.address=zookeeper://192.168.170.41:2181
#dubbo 通信端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20881
3.1.4创建子项目provider

pom.xml
       
    com.aaa
    common
    1.0-SNAPSHOT


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.2.0


    mysql
    mysql-connector-java
    5.1.10



    com.alibaba
    druid
    1.2.8


    com.alibaba
    druid-spring-boot-starter
    1.2.8

启动类加入:

package com.aaa.pp;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@EnableDubboConfiguration
//@EnableTransactionManagement
public class PowerProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(PowerProviderApplication.class,args);
    }
}
          
编写服务实现类加入  @server 
            @com.alibaba.dubbo.config.annotation.Service
            @Service  为dubbo 注解,注解暴露服务
application.properties:
spring.datasource.druid.url=jdbc:mysql://localhost:3306/db_qy141
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
#端口号
server.port=19090
#dubbo 服务名称
spring.dubbo.application.name=power_provider
zookeeper 注册中心

spring.dubbo.registry.address=zookeeper://192.168.170.41:2181
#zookeeper 通信端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20881
3.2 服务治理
3.2.1 多台zk集群
前面配置过,直接启动
3.2.2 配置治理项目,并且测试
配置tomcat
tar -xzvf /root/software/apache-tomcat-9.0.52.tar.gz -C /usr/
vim /etc/profile
修改为:

export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:/usr/apache-tomcat-9.0.52/bin

生效:
source /etc/profile
startup.sh
查看是否启动成功
jps 或者 ps -ef |grep tomcat |grep -v grep
jps 可以看到Bootstrap进程
复制准备好dubbo-admin项目到tomcat下
使用xft 把dubbo-admin.war上传到/usr/apache-tomcat-9.0.52/webapps/
修改配置
vim /usr/apache-tomcat-9.0.52/webapps/dubbo-admin/WEB-INF/dubbo.properties
修改第一行:
127.0.0.1 修改为 192.168.xxx.41 (zk所在的机子IP)
启动zk集群:
/root/shelldir/zk-start-stop.sh
测试
http://192.168.170.41:8080/dubbo-admin/
3.2.3 启动提供者和消费者,查看admin项目变化

3.3 负载均衡,集群容错, 服务降级(半权) 路由规则,动态配置,访问控制,权重调节
打包生成多个服务:

cd soft/
使用xftp 把provider_jar上传
cd provider_jar/
java -jar
java -jar provider.jar
运行出错:slf4j-log4j12-1.7.26.jar
修改META-INF/MANIFEST.MF文件,删除slf4j-log4j12-1.7.26.jar包,再次打包运行
再次rebuild 时,要再次修改META-INF/MANIFEST.MF 文件中多余的jar

4,知识点总结
5,本章面试题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020903.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号