Java架构学习(四十五)Dubbo基础&网站演变过程&SOA和微服务技术总结&微服务架构模式&Dubbo架构原理&Dubbo解决的问题&Dubbo创建项目架构&Dubbo发布服务&Dubbo消费服务

一、网站演变过程

什么时候使用到Dubbo框架?
答:只有在RPC远程调用的时候才会使用到dubbo框架。

网站架构演变过程:

单点项目/单点系统架构:MVC这种模式

在这里插入图片描述

单点系统中,缺点:如果有几百个程序员开发同一个项目,
会产生代码冲突的问题。适合小团队开发。

互联网公司的特征:人比较多、高并发、高可用、开发人员比较多。
敏捷开发:就是把项目拆分很细。
分布式开发:将一个项目,拆分成多个子项目,如:会员系统、订单系统、
支付系统。使用的是RPC远程调用技术、项目之间互不影响。

分布式开发:
SOA面向服务的架构:主要以http+xml报文格式来传输。
	将项目拆分成多个子的服务。使用Webservice
SOA架构:要把业务逻辑层封装起来。控制层剥离开来。
面向服务SOA架构就是将床头项目业务逻辑层分装成
服务接口,暴露其他给其他服务进行调用。

在这里插入图片描述


微服务架构:是通过SOA架构演变过来的。

二、分布式开发需要使用的技术SOA&微服务

分布式领域中使用RPC需要使用的技术:
httpclient、Dubbo(阿里)、Dubbox、Zookeeper(注册中心)、SpringCloud、
eureka注册中心(fegin、rest客户端调用工具、zuul、分布式配置中心、
ribbin、断路器hystrix)、redis、mongdb、消息中间件、
之后分布式开发领域中:生产者、消费者、注册中心、监控中心、容器。

SpringBoot:简化XML配置、快速整合第三方框架开发、内置tomcat容器。

三、微服务架构

SpringCloud http协议+json格式来进行传输
或者使用Dubbox

在这里插入图片描述

四、Dubbo架构原理

1、dubbo是rpc远程调用、服务治理、分布式服务框架,
      dubbo实现的SOA面向服务架构的框架。满足分布式开发需求。
      在分布式中主要做远程调用,功能有集群容错机制、负载均衡
      动态配置、路由策略、服务治理。
  2、里面底层实现是  长连接+NIO框架。


3、dubbo里面原理图:
	生产者:提供接口
	消费者:调用接口
	注册中心:负载均衡、容错机制、路由策略、服务治理
	监控中心:
	容器:

在这里插入图片描述

五、dubbo能够解决的问题

SpringCloud中的功能:
 enruka:注册中心
 ribbion:负载均衡
 fegin/rest:客户端调用工具
 config:分布式文件配置中心
 zuul:网关
 hystrix:熔断器

dubbo能够解决什么问题?
问题:rpc远程调用、服务的URI地址、负载均衡(f5,lvs,nginx)、
依赖关系非常复杂,
每个服务还需要监控。
Dubbo有的功能:
	API透明化,就相当于控制层带哦用业务逻辑层
	负载均衡机制可以替代F5、nginx、lvs、容错机制
	服务注册与发现,主要提供API地址
	dubbo采用的是Spring机制

六、Dubbo创建项目架构模式

会员服务提供查询用户接口信息,暴露给订单系统,调用会员服务接口查询用户信息
Dubbo项目结构误区
leeue-member-interface  会员提供服务项目 没有具体实现
leeue-member-service-impl --生产者 实现会员服务项目具体实现
leeue-order-service --- 订单服务

七、使用Dubbo发布服务 这里以会员服务案例

首先:会员服务是向外面提供接口的,这里我们默认会员为生产者。

所以要先建立会员接口项目,再简历会员接口实现项目。

在这里插入图片描述

会员接口项目 代码  因为向外面提供接口服务的,只需要定义接口就行了。
package com.leeue.member.service;

/**
 * @classDesc: 功能描述:(会员服务提供接口的)
 * @author:<a href="leeue@foxmail.com">李月</a>
 * @Version:v1.0
 * @createTime:2018年12月5日 下午3:31:20
 */
public interface UserService {
	/**
	 * 使用用户的userId查询用户信息
	 * @param id
	 * @return
	 */
	public String getUser(Long id);
}

会员接口实现项目:pom.xml要引入上面的接口项目的坐标。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.leeue</groupId>
	<artifactId>45_Dubbo_leeue_member_provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>


	<dependencies>
		<!--引入会员服务接口 -->
		<dependency>
			<groupId>com.leeue</groupId>
			<artifactId>45_Dubbo_member_interface</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<!-- 添加dubbo框架 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.6</version>
		</dependency>
		<!-- 添加zk客户端依赖 -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>
	</dependencies>

</project>
实现:
package com.leeue.member.service.impl;

import com.leeue.member.service.UserService;

/**
 * 
 * @classDesc: 功能描述:(对会员项目的实现)
 * @author:<a href="leeue@foxmail.com">李月</a>
 * @Version:v1.0
 * @createTime:2018年12月5日 下午3:59:36
 */
public class UserServiceImpl implements UserService {

	
	public String getUser(Long id) {
		System.out.println("会员服务  接受订单服务####getUser() id:"+id);
		if (id == 1) {

			return "嘻嘻我是id_1";
		}
		if (id == 2) {
			return "哈哈我是id_2";
		}
		return "未找到....";

	}

}

另外:在会员服务接口实现这个项目中要加入provider.xml

provider.xml
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans.xsd           http://code.alibabatech.com/schema/dubbo           http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">

	<!-- 提供方应用信息,用于计算依赖关系    项目注册到dubbo的时候使用的是什么名称-->
	<dubbo:application name="provider" />
	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181" />
	<!-- 用dubbo协议在29014端口暴露服务 -->
	<dubbo:protocol name="dubbo" port="29014" />
	<!-- 声明需要暴露的服务接口 -->
	<dubbo:service interface="com.leeue.member.service.UserService"
		ref="userService" />
	<!-- 具体的实现bean -->
	<bean id="userService" class="com.leeue.member.service.impl.UserServiceImpl" />
</beans>

八、消费服务使用Dubbo消费服务

这里是订单服务来调用会员服务:
pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.leeue</groupId>
	<artifactId>45_Dubbo_order_consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<!--引入会员服务接口 -->
		<dependency>
			<groupId>com.leeue</groupId>
			<artifactId>45_Dubbo_member_interface</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<!-- 添加dubbo框架 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.6</version>
		</dependency>
		<!-- 添加zk客户端依赖 -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>
	</dependencies>
</project>
consumer.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
	<dubbo:application name="consumer" />
	<!-- 使用multicast广播注册中心暴露发现服务地址 -->
	<dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181" />
	<!-- 生成远程服务代理,可以和本地bean一样使用demoService  rpc远程调用-->
	<dubbo:reference id="userService" interface="com.leeue.member.service.UserService" />
</beans>

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值