Dubbo入门及Dubbo-admin安装

Dubbo入门及Dubbo-admin安装,第1张

Dubbo入门及Dubbo-admin安装 一、Dubbo是什么

什么是Dubbo?
Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
Spring-cloud-alibaba-dubbo是基于SpringCloudAlibaba技术栈对dubbo技术的一种封装,目的在于实现基于RPC的服务调用。

什么是Feign?
Feign是Spring Cloud提供的一个声明式的伪Http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
Nacos注册中心很好的兼容了Feign,Feign默认集成了Ribbon,所以在Nacos下使用Fegin默认就实现了负载均衡的效果。

Feign与Dubbo的对比
Feign与Dubbo功能上有很多类似的地方,因为都是专注于远程调用这个动作。比如注册中心解耦、负载均衡、失败重试熔断、链路监控等。
Dubbo除了注册中心需要进行整合,其它功能都自己实现了,而Feign大部分功能都是依赖全家桶的组件来实现的。Dubbo小而专一,专注于远程调用。而Spring全家桶而言,远程调用只是一个重要的功能而已。

Dubbo官网:http://dubbo.apache.org.
Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。
Dubbo 是 SOA时代的产物,SpringCloud 是微服务时代的产物。

Dubbo架构


节点角色说明:
Provider:暴露服务的服务提供方
Container:服务运行容器
Consumer:调用远程服务的服务消费方
Registry:服务注册与发现的注册中心
Monitor:统计服务的调用次数和调用时间的监控中心

二、Dubbo快速入门

准备一个配置中心这里以zookeeper为例
搭建zookeeper可参考该链接:https://blog.csdn.net/weixin_56219549/article/details/122366759.

确认zookeeper启动

安装dubbo-admin(这里可一下linux安装步骤)

下载链接:https://github.com/apache/dubbo-admin.

 yum -y install git

git clone https://github.com/apache/dubbo-admin.git

mvn clean package -Dmaven.skip.test=true

java -jar dubbo-admin-server-0.4.0.jar

启动

本地登录

主页面

创建公共接口模块(公共模块存放实体类和接口)

public class UserAddress implements Serializable {
	
	private Integer id;
    private String userAddress; //用户地址
    private String userId; //用户id
    private String consignee; //收货人
    private String phoneNum; //电话号码
    private String isDefault; //是否为默认地址    Y-是     N-否
    
    public UserAddress() {
		super();
		// TODO Auto-generated constructor stub
	}
    
	public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,
			String isDefault) {
		super();
		this.id = id;
		this.userAddress = userAddress;
		this.userId = userId;
		this.consignee = consignee;
		this.phoneNum = phoneNum;
		this.isDefault = isDefault;
	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserAddress() {
		return userAddress;
	}
	public void setUserAddress(String userAddress) {
		this.userAddress = userAddress;
	}
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getConsignee() {
		return consignee;
	}
	public void setConsignee(String consignee) {
		this.consignee = consignee;
	}
	public String getPhoneNum() {
		return phoneNum;
	}
	public void setPhoneNum(String phoneNum) {
		this.phoneNum = phoneNum;
	}
	public String getIsDefault() {
		return isDefault;
	}
	public void setIsDefault(String isDefault) {
		this.isDefault = isDefault;
	}
}
public interface OrderService {
	
	
	public List initOrder(String userId);

}
public interface UserService {
	
	
	public List getUserAddressList(String userId);

}

创建服务提供者Provider模块

pom.xml



    
        dubbo-demo
        com.jsxl
        1.0-SNAPSHOT
    
    4.0.0

    service_provider
    
        
            com.jsxl
            common
            1.0-SNAPSHOT
        
        
        
        
            com.alibaba
            dubbo
            2.6.2
        
        
        
            org.apache.curator
            curator-framework
            2.12.0
        
    

public class UserServiceImpl implements UserService {

	@Override
	public List getUserAddressList(String userId) {
		System.out.println("UserServiceImpl.....old...");
		// TODO Auto-generated method stub
		UserAddress address1 = new UserAddress(1, "北京市", "1", "zhangsan", "1234567890", "Y");
		UserAddress address2 = new UserAddress(2, "深圳市", "1", "lisi", "1234567890", "N");

		return Arrays.asList(address1,address2);
	}

}

provider.xml




	
	

	
	
	

	
	

	
	
	
	
	

public class MainApplication {
	
	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");
		ioc.start();
		
		System.in.read();
	}

}

启动观察dubboadmin

创建服务消费者Consumer模块

@Service
public class OrderServiceImpl implements OrderService {

	@Autowired
    UserService userService;
	@Override
	public List initOrder(String userId) {
		// TODO Auto-generated method stub
		System.out.println("用户id:"+userId);
		//1、查询用户的收货地址
		List addressList = userService.getUserAddressList(userId);
		for (UserAddress userAddress : addressList) {
			System.out.println(userAddress.getUserAddress());
		}
		return addressList;
	}
	
}

pom.xml



    
        dubbo-demo
        com.jsxl
        1.0-SNAPSHOT
    
    4.0.0

    order-service-consumer
    
        
            com.jsxl
            gmall-interface
            1.0-SNAPSHOT
        
        
        
        
            com.alibaba
            dubbo
            2.6.2
        
        
        
            org.apache.curator
            curator-framework
            2.12.0
        
    

consumer.xml



	

	

	
	
	

public class MainApplication {
	
	@SuppressWarnings("resource")
	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
		
		OrderService orderService = applicationContext.getBean(OrderService.class);
		
		orderService.initOrder("1");
		System.out.println("调用完成....");
		System.in.read();
	}
}

启动

dubbo高级特性(图解)

dubbo 内部已经将序列化和反序列化的过程内部封装了
我们只需要在定义pojo类时实现Serializable接口即可
一般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块。

注册中心挂了,服务是否可以正常访问?

可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。
当服务提供者地址发生变化时,注册中心会通知服务消费者。

超时与重试


服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。
dubbo 利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
使用timeout属性配置超时时间,默认值1000,单位毫秒。

设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
如果出现网络抖动,则这一次请求就会失败。
Dubbo 提供重试机制来避免类似问题的发生。
通过 retries 属性来设置重试次数。默认为 2 次。

多版本

负载均衡



集群容错

服务降级

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5705583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存