dubbo上手实践

dubbo上手实践

dubbo是什么?学习dubbo要解决什么问题?

1)Dubbo 是阿里巴巴公司开源的一个高性能优秀的开源分布式服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。
2)对于业务繁杂的业务系统,业务复杂,没有很好的进行业务拆分,版本不断迭代导致代码结构混乱,版本测试周期长,开发困难,上线困难,如果上线测试遇到严重bug,只能进行版本回退,性能遇到瓶颈时顶多搭建负载均衡集群分流,当并发访问量到一定数量后,基本很难再有性能提升,做了负载均衡也无济于事。

分布式和集群区别(引用知乎形象图)

所以dubbo应运而生,通过把单个应用进行复杂业务进行拆分成一个个独立的子系统,在分布式的结构中,这些子系统统称为服务,由于单应用业务清晰,规模较小,所以有微服务一说。最典型的应用场景就是电商系统,把以往复杂单应用复杂系统拆分为用户服务、产品服务、订单服务、后台管理服务、数据分析服务等等,服务之间可以独立运行,也有依赖关系,主要是数据操作交互,服务之间就通过RPC的方式调用(以往我们都是http接口),什么是RPC,后续再做详细说明。

官方学习车牌号:
apache:http://dubbo.apache.org/zh-cn/docs/user/new-features-in-a-glance.html

github:https://github.com/apache/dubbo/

在这里插入图片描述

Registry:注册中心 Consuumer:服务消费者 Provider:服务提供者 Monitor:监控中心

注册中心:也就是我们服务提供者需要把服务注册到某个地方,动态地注册和发现服务,使服务的位置透明,这些接口服务可以通过注册中心暴露出来通服务消费者调用。

服务消费者:调用远程服务的服务消费方

服务提供者:暴露服务的服务提供方

监控中心:统计服务的调用次数和调用时间的监控中心

简单搭建dubbo服务

1)安装注册中心
https://github.com/apache/dubbo/tree/2.5.x/dubbo-simple
下载后解压工程,cd到dubbo-admin下,使用mvn clean package打包,前提是maven环境没问题,如果打包不成功,就慢慢用eclipse打开工程看看缺失
什么jar或者什么问题导致,我这边遇到的是就是maven_compiler_version改成3.1的,高版本3.7或者如果不加3.1死活打包都不成功。

打包之前看看自己注册中心用的是那种,这里我们先用默认的Multicast 注册中心,其他方式可以参考dubbo文档,
注册中心配置dubbo-admin\dubbo-admin\src\main\resources\dubbo.properties中可看到dubbo.registry.address
dubbo.registry.address=multicast://224.5.6.7:1234 如果不是改成这种。

命令行cd到目录下面时,执行mvn clean package命令。打包成功后出现如下界面。
在这里插入图片描述

执行java -jar dubbo-admin-0.0.1-SNAPSHOT.jar 启动成功后
通过浏览器打开http://localhost:7001/governance/applications出现监控中心界面如下,安装成功
在这里插入图片描述

2)创建统一接口服务和一些公共类的封装api(user-service-api)应用
目的是减少代码冗余,举个例子,在电商系统中,用户服务这个UserService可能在订单服务,产品服务都会用到,对于这种就避免不要重新创建UserService可能导致不一致难以维护和增加工作量。

创建service,然后打成jar,后面服务消费者和服务提供者都会引入使用

public interface GreetingsService {
String sayHi(String name);
}

public interface PersonService {
String attributes() ;
}

3)创建服务提供者,向注册中心注册暴露接口服务
#接口服务
public class GreetingsServiceImpl implements GreetingsService {
@Override
public String sayHi(String name) {
return "hi, " + name;
}
}

#启动类
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Application {

public static void main(String[] args) throws Exception {
	 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"provider.xml"});
	 System.out.println("dubbo service started");
	 context.start();
     System.in.read(); 
}

}

#provider.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="first-dubbo-provider"  />

 <!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234?unicast=false"/>

<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />

<!-- 声明需要暴露的服务接口 ref指向服务的真正实现对象 -->
<dubbo:service interface="com.yueli.service.GreetingsService" ref="greetingsServiceImpl" />

<!-- 和本地bean一样实现服务 -->
<bean id="greetingsServiceImpl" class="com.yueli.demo.service.impl.GreetingsServiceImpl" />

#启动服务提供者,查看监控中心

4)创建服务消费者
#调用远程服务(特别注意注解Service引入的是spring的不是dubbo的,配置文件中用自动扫包方式)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yueli.service.GreetingsService;
import com.yueli.service.PersonService;

@Service(“personService”)
public class PersonServiceImpl implements PersonService {

@Autowired
private GreetingsService greetingsService;

@Override
public String attributes() {
	String saySomeThings=greetingsService.sayHi("dubbo");
    return "属性: " + saySomeThings;
}

}

#启动应用(方式1,间接调用)
import java.io.IOException;

import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yueli.service.PersonService;

@EnableDubboConfig
public class Application {
private static String zookeeperHost = System.getProperty(“zookeeper.address”, “127.0.0.1”);

@SuppressWarnings("resource")
public static void main(String[] args) {
	 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"consumer.xml"});
     context.start();
     PersonService service =context.getBean("personService", PersonService.class);
     String message = service.attributes();
     System.out.println(message);
     try {
		System.in.read();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} // 按任意键退出
}

}

#启动应用(方式二,直接调用)
import java.io.IOException;

import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yueli.service.GreetingsService;

@EnableDubboConfig
public class Application {
private static String zookeeperHost = System.getProperty(“zookeeper.address”, “127.0.0.1”);

@SuppressWarnings("resource")
public static void main(String[] args) {
	 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"consumer.xml"});
     context.start();
      GreetingsService service =context.getBean("greetingsService", GreetingsService.class);;
      String message = service.sayHi("dubbo");
      System.out.println(message);
     try {
		System.in.read();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} // 按任意键退出
}

}

#配置consumer.xml服务消费者远程调用

<?xml version="1.0" encoding="UTF-8"?>


<context:component-scan base-package=“com.yueli.consumer.service.impl”></context:component-scan>

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->

<dubbo:application name=“first-dubbo-consumer”/>

<dubbo:registry address=“multicast://224.5.6.7:1234?unicast=false”/>

<dubbo:reference id=“greetingsService” interface=“com.yueli.service.GreetingsService” check=“false” />

#启动服务消费者,查看监控中心,查看控制台,远程RPC方式调用成功
在这里插入图片描述
在这里插入图片描述

源码地址:
https://github.com/Jueyingyue/dubbo-simple.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值