在 Spring 框架中使用 Dubbo
2021-03-23 07:26
标签:工具 path 体系结构 ref epo curator getbean ann pass http://dubbo.apache.org/zh-cn/ Dubbo 官网 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html Dubbo 文档 spring 5.1.3 + zookeeper 3.6.2 + dubbo 2.6.5; 工具:IDEA 2019.1.2 执行流程: 启动注册中心:例如 zookeeper,接受 provider 的注册,接受 consumer 的订阅,当 provider 有变化的时候,会主动通知 consumer; 启动Provider:provider是服务的提供者,例如提供 com.xian.service.impl.UserServiceImpl 这个服务,它是服务的具体实现,provider 启动的时候会向 zookeeper 这个注册中心注册,表明自己可以提供哪些服务; 启动Consumer:consumer 是服务的消费者,例如通过 com.xian.controller.UserController 去调用 UserServiceImpl,consumer 启动的时候会去 zookeeper 这个注册中心 订阅自己需要的服务; 启动Registry:注册中心,例如 zookeeper,接受 provider 的注册,接受 consumer 的订阅,当 provider 有变化的时候,会主动通知 consumer; consumer 调用 provider 的具体服务,例如 UserController 调用 UserServiceImpl,但是具体由那一台 provider 服务器提供服务,取决于 负载均衡调度算法; Monitor:监控中心,统计服务被调用的次数和时间,服务的消费者和提供者会在内存中累计调用次数和 菜单栏:File| New Project, 创建一个空的 Project 填 Project 的名称和存放路径,然后点击右下角的【Finish】: 要在这个 Project 下创建 3 个子 module,最终目录 module 结构如下: 填项目的坐标:GroupId, ArtifactId 父 module 和父工程全部选【None】: 填项目的坐标:GroupId, ArtifactId 去仓库 https://mvnrepository.com/ 中找,例如找 dubbo,搜索以后一般用 usages使用量最高的那个,点击包的标题进入下一个页面: 版本号也是选择使用量最高的,点击版本号进入下一个页面: 默认选中了 maven 标签,点击一下就自动复制到粘贴板了; 把复制到的包名贴到 module 的根目录下的 pom.xml 文件中, 然后点击右下角的 【Import Changes】,maven 就会自动从仓库中下载这个版本的包; 找 zookeeper 包也和上面的流程一样: 这是测试程序 创建 ioc 容器文件:consumer.xml 创建后的效果: 打开 Test.java (dubbo-spring-provider) ,按 Ctrl + Shift + F10,或者右键 【Run ‘Test main‘】运行此文件; 打开 Test.java (dubbo-spring-consumer) ,按 Ctrl + Shift + F10,或者右键 【Run ‘Test main‘】运行此文件; Test.java (dubbo-spring-provider) 打印: Test.java (dubbo-spring-consumer) 打印: 可以看到,consumer 访问 provider 提供的服务了; 在 Spring 框架中使用 Dubbo 标签:工具 path 体系结构 ref epo curator getbean ann pass 原文地址:https://www.cnblogs.com/xian19900116/p/13855306.html在 Spring 框架中使用 Dubbo
参考网址
框架组成
Dubbo 体系结构
调用时间,定时每分钟向监控中心发送一次统计数据;创建 Project
工程:dubbo-spring-common
创建工程
工程结构
pom.xml
User.java
package com.xian.entity;
import java.io.Serializable;
/**
* Author: xian
* Date: 2020-10-19 21:02
* Description: 描述
*/
public class User implements Serializable {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username=‘" + username + ‘\‘‘ +
", password=‘" + password + ‘\‘‘ +
‘}‘;
}
}
UserService.java
package com.xian.service;
import com.xian.entity.User;
/**
* Author: xian
* Date: 2020-10-19 21:04
* Description: 描述
*/
public interface UserService {
public User findById(int id);
}
工程:dubbo-spring-provider
创建工程
工程结构
找依赖包的方法
pom.xml
provider.xml
UserServiceImpl.java
package com.xian.service.impl;
import com.xian.entity.User;
import com.xian.service.UserService;
/**
* Author: xian
* Date: 2020-10-19 21:22
* Description: 描述
*/
public class UserServiceImpl implements UserService {
@Override
public User findById(int id) {
System.out.println("UserServiceImpl.findById");
User user = new User();
user.setId(id);
user.setUsername("xian");
user.setPassword("123");
return user;
}
}
Test.java
package com.xian;
import javassist.ClassPath;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Scanner;
/**
* Author: xian
* Date: 2020-10-19 22:17
* Description: 描述
*/
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:provider.xml");
new Scanner(System.in).next();
}
}
工程:dubbo-spring-consumer
创建工程
工程结构
pom.xml
consumer.xml
UserController.java
package com.xian.controller;
import com.xian.entity.User;
import com.xian.service.UserService;
/**
* Author: xian
* Date: 2020-10-19 22:24
* Description: 描述
*/
public class UserController {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void findUser() {
User user = userService.findById(1001);
System.out.println(user);
}
}
Test.java
package com.xian;
import com.xian.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Scanner;
/**
* Author: xian
* Date: 2020-10-19 22:39
* Description: 描述
*/
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:consumer.xml");
UserController userController = ac.getBean(UserController.class);
userController.findUser();
new Scanner(System.in).next();
}
}
启动 zookeeper
启动 dubbo-spring-provider
启动 dubbo-spring-consumer
打印
文章标题:在 Spring 框架中使用 Dubbo
文章链接:http://soscw.com/index.php/essay/67788.html