Dubbo服务的搭建
dubbo框架主要作用是基于RPC的远程调用服务管理,但是注册中心是用的zookeeper,搭建dubbo,首先要安装zookeeper,配置zookeeper。。。
实现功能如图所示:(存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表)
一、安装zookeeper
1、解压下载的安装包
2、修改配置文件zoo.cfg(解压出来不是这个名字,是zoo_sample.cfg,改了一下名字):该目录必须存在。
3、启动zookeeper服务:
二、搭建B系统
1、创建工程(maven工程)
2、导入依赖
<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>cn.itcast.dubbo</groupId>
<artifactId>dubbo-b</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging> <dependencies>
<!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency> <dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
</dependency> <dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<!-- 排除传递spring依赖 -->
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8181</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
3、配置log4j文件
log4j.rootLogger=DEBUG,A1
log4j.logger.com.taotao = DEBUG
log4j.logger.org.mybatis = DEBUG log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
4、创建User对象
package cn.itcast.dubbo.pojo; //使用dubbo要求传输的对象必须实现序列化接口
public class User implements java.io.Serializable { private static final long serialVersionUID = -2668999087589887337L; private Long id; private String username; private String password; private Integer age; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} }
5、创建UserService(接口)提供查询服务
package cn.itcast.dubbo.service; import java.util.List; import cn.itcast.dubbo.pojo.User; public interface UserService { /**
* 查询所有的用户数据
*
* @return
*/
public List<User> queryAll(); }
6、创建UserServiceImpl实现类
package cn.itcast.dubbo.service.impl; import java.util.ArrayList;
import java.util.List; import cn.itcast.dubbo.pojo.User;
import cn.itcast.dubbo.service.UserService; public class UserServiceImpl implements UserService{ /**
* 实现查询,这里做模拟实现,不做具体的数据库查询
*/
public List<User> queryAll() {
List<User> list = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setAge(10 + i);
user.setId(Long.valueOf(i + 1));
user.setPassword("123456");
user.setUsername("username_" + i);
list.add(user);
}
return list;
} }
7、编写dubbo配置文件
具体配置:(dubbo-server.xml的配置,注意这个自己在eclipse中导入一下dubbo的xsd约束文件,不然会报错的)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubbo-b-server" /> <!-- 这里使用的注册中心是zookeeper -->
<dubbo:registry address = "zookeeper://127.0.0.1:2181" client="zkclient" /> <!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" /> <!-- 将该接口暴露到dubbo中 -->
<dubbo:service interface="cn.itcast.dubbo.service.UserService " ref="userServiceImpl"/> <!-- 将具体的实现类加入到Spring容器中 -->
<bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl"/> </beans>
8、编写web.xml 文件,主要是配置spring的容器,项目启动的时候启动spring的容器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>dubbo-b</display-name> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo/dubbo-*.xml</param-value>
</context-param> <!--Spring的ApplicationContext 载入 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> </web-app>
9、启动Tomcat(Maven Build的方式启动Tomcat)
查看Tomcat日志:发现userservice的服务已经发布成功了。
2019-05-19 21:59:13,588 [localhost-startStop-1] [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry]-[INFO] [DUBBO] Load registry store file C:\Users\ssc\.dubbo\dubbo-registry-127.0.0.1.cache, data: {cn.itcast.dubbo.service.UserService=empty://169.254.103.222:20880/cn.itcast.dubbo.service.UserService?anyhost=true&application=dubbo-b-server&category=configurators&check=false&dubbo=2.5.3&interface=cn.itcast.dubbo.service.UserService&methods=queryAll&pid=3936&side=provider×tamp=1558177989176}, dubbo version: 2.5.3, current host: 127.0.0.1
2019-05-19 21:59:13,606 [localhost-startStop-1] [org.I0Itec.zkclient.ZkConnection]-[DEBUG] Creating new ZookKeeper instance to connect to 127.0.0.1:2181.
2019-05-19 21:59:13,608 [ZkClient-EventThread-19-127.0.0.1:2181] [org.I0Itec.zkclient.ZkEventThread]-[INFO] Starting ZkClient event thread.
可以看到,已经将UserService服务注册到zookeeper注册中心,协议采用的是dubbo
三、搭建A系统
1、创建工程
2、导入依赖
<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>cn.itcast.dubbo</groupId>
<artifactId>dubbo-a</artifactId>
<version>0.0.1-SNAPSHOT</version> <dependencies>
<!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<!-- 排除传递spring依赖 -->
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
</dependency> <dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency> <!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3、配置log4j文件
log4j.rootLogger=DEBUG,A1
log4j.logger.com.taotao = DEBUG
log4j.logger.org.mybatis = DEBUG log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
4、从b系统中拷贝User对象、UserService接口到a系统
5、编写dubbo配置文件
配置文件如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubbo-a-consumer"/> <!-- 这里使用的注册中心是zookeeper -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/> <!-- 从注册中心中查找服务 -->
<dubbo:referenceid="userService" interface="cn.itcast.dubbo.service.UserService"/> </beans>
6、编写UserService测试用例
package cn.itcast.dubbo.service; import java.net.InetAddress;
import java.util.List; import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.itcast.dubbo.pojo.User; import com.alibaba.dubbo.common.utils.NetUtils; public class UserServiceTest { private UserService userService; @Before
public void setUp() throws Exception {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:dubbo/*.xml");
this.userService = applicationContext.getBean(UserService.class);
} @Test
public void testQueryAll() {
List<User> users = this.userService.queryAll();
for (User user : users) {
System.out.println(user);
}
} public static void main(String[] args) {
InetAddress localAddress = NetUtils.getLocalAddress();
System.out.println(localAddress.getHostAddress()); }
}
四、解决代码重复的问题
1、创建dubbo-b-api
2、将dubbo-b中的pojo和service接口移动到dubbo-b-api中
3、在dubbo-b的pom.xml文件中添加dubbo-b-api的依赖
4、在dubbo-a的pom.xml文件中添加dubbo-b-api的依赖,并且将pojo与service接口删除
5、分别删除dubbo-a和dubbo-b中的重复代码
注意:启动时,不要忘记吧dubbo-b-api项目maven install安装到中央仓库
Dubbo服务的搭建的更多相关文章
- dubbo服务自动化测试搭建
java实现dubbo的消费者服务编写:ruby实现消费者服务的接口测试:通过消费者间接测试dubbo服务接口的逻辑 内容包括:dubbo服务本地调用环境搭建,dubbo服务启动,消费者部署,脚本编写 ...
- dubbo服务简单搭建
一.初识dubbo: 架构图: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: 统计服务的 ...
- Dubbo服务的搭建与使用
官方地址Dubbo.io Dubbo 主要功能 高并发的负载均衡,多系统的兼容合并(理解不深,不瞎掰了) Dubbo 主要组成有四部分 Zookeeper(服务注册中心) Consumer(服务消费方 ...
- Dubbo——基于Zookeeper服务框架搭建及案例演示
一.了解SOA微服务架构 在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) 当服务越来 ...
- Dubbo学习笔记2:Dubbo服务提供端与消费端应用的搭建
Demo结构介绍 Demo使用Maven聚合功能,里面有三个模块,目录如下: 其中Consumer模块为服务消费者,里面TestConsumer和consumer.xml组成了基于Spring配置方式 ...
- windows环境搭建dubbo服务
windows环境搭建dubbo服务 1:首先需要下载dubbo的注册中心 zookeeper zookeeper注册中心下载地址链接:http://mirror.bit.edu.cn/apache/ ...
- 【2020-03-21】Dubbo本地环境搭建-实现服务注册和消费
前言 本周主题:加班工作.本周内忙于CRUD不能自拔,基本每天都是九点半下班,下周上线,明天还要加班推进进度.今天是休息日,于是重拾起了dubbo,打算近期深入了解一下其使用和原理.之所以说是重拾,是 ...
- dubbo系列四、dubbo服务暴露过程源码解析
一.代码准备 1.示例代码 参考dubbo系列二.dubbo+zookeeper+dubboadmin分布式服务框架搭建(windows平台) 2.简单了解下spring自定义标签 https://w ...
- Dubbo简单环境搭建
Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...
随机推荐
- servlet小型应用服务器搭建通过tomcat发布web项目
1.servlet简介:Servlet 是一个 Java程序,是在服务器上运行以处理客户端请求并做出响应的程序 2.servlet的生命周期图解: 3.各阶段: 4.基本的servlet代码: pub ...
- mongodb-CURD
插入 import pymongo conn = pymongo.MongoClient('mongodb://192.168.10.10:27017') mydb = conn['myDB'] my ...
- For循环执行AFNetworking请求
屏幕快照 2017-12-19 下午1.46.25.png 需求:如下操作打印的文档为 NSLog(@"开始");for(NSIntegeri =0; i <5; i++) ...
- HDU4405(期望dp)
标准期望套路,很水.读题看好是到n就可以停止了. ; int n, m; db dp[maxn]; map<int, int> mp; int main() { while (~scanf ...
- 一个发散动画的菜单控件(主要记录控件x,y坐标的运动状况)
private void showCloseAnim() { int size = viewList.size(); if (size % 2 == 0) { //是偶数 for (int i = 0 ...
- 20 个案例教你在 Java 8 中如何处理日期和时间?
前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Jav ...
- nginx 配置步骤
D:\myphp2017\nginx\conf.nginx.conf37行 吧localhost 改为www.ff.com41行取消注释44行 加D:\myphp2017\nginx\html45 在 ...
- Oracle 恢复数据后,数据库中中文变成问号解决方法
1.右击---我的电脑---环境变量 2.新增环境变量 变量名:LANG=zh_CN.GBK NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 3.重启PLSQL或 ...
- asp.net调试技巧
一眨眼的功夫,自己已经学习asp.net的有一年的功夫了.虽然称不上什么大神,但是也有一点知识的积累.就写一片调试的入门文章给那些刚刚入门迷茫的童鞋们.希望你学习了我这篇文章能从迷茫的生活中找回编程的 ...
- React 实践记录 03 React router
Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...