下载及运行管理台:
1.进入bubbo官网(https://dubbo.apache.org/zh/);
2.进入dubbo的github,往下翻找到截图的位置:点击Dubbo Admin
3.下载
4.下载完毕后,解压:
5.确认注册中心:
6.进入dubbo-admin目录,执行cmd命令,打包:
7.运行
8.访问控制台 http://127.0.0.1:7001:
用户名密码默认为 root root
接下来开始我们的dubbo之旅,我们来创建三个小工程
接口以及bean实体工程
UserInfo类:
注意这里的实体bean得支持序列化,以便可以在网络传输(不支持实例化时,会爆:java.lang.IllegalStateException: Serialized class com.cjian.gmall.bean.UserInfo must implement java.io.Serializable)
package com.cjian.gmall.bean;
import java.io.Serializable;
public class UserInfo implements Serializable {
private static final long serialVersionUID = 3235905699101449798L;
private int id;
private String name;
private int age;
private String address;
public UserInfo(int id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "UserInfo{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", address='" + address + '\''
+ '}';
}
}
两个接口:
package com.cjian.gmall.service;
import com.cjian.gmall.bean.UserInfo;
import java.util.List;
public interface UserService {
List<UserInfo> getUserAddressList(String id);
}
package com.cjian.gmall.service;
public interface OrderService {
void initOrder(String userId);
}
服务提供方
依赖:
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>user-service-gamll-interface</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- 高版本会报错
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>-->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
具体实现类:
package com.cjian.gmall.service.impl;
import com.cjian.gmall.bean.UserInfo;
import com.cjian.gmall.service.UserService;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Override
public List<UserInfo> getUserAddressList(String id) {
UserInfo info1 = new UserInfo(1, "cjian", 28, "安徽合肥");
UserInfo info2 = new UserInfo(2, "cjian2", 28, "江苏南京");
return Arrays.asList(info1,info2);
}
}
测试类:
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class ProviderTest {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(
"provider.xml");
ioc.start();
System.in.read();
}
}
dubbo配置:
这里我们使用前几篇说的zookeeper来做注册中心
<?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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="user-service-provider" />
<!-- 使用注册中心暴露服务地址 -->
<!--<dubbo:registry address="zookeeper://127.0.0.1:2181" />-->
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.cjian.gmall.service.UserService" ref="userServiceImpl" />
<!-- 和本地bean一样实现服务 -->
<bean id="userServiceImpl" class="com.cjian.gmall.service.impl.UserServiceImpl" />
</beans>
服务调用方
依赖:
<dependency>
<groupId>org.example</groupId>
<artifactId>user-service-gamll-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
实现类:
package com.cjian.gmall.service.impl;
import com.cjian.gmall.bean.UserInfo;
import com.cjian.gmall.service.OrderService;
import com.cjian.gmall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
UserService userService;
@Override
public void initOrder(String userId) {
List<UserInfo> userAddressList = userService.getUserAddressList(userId);
System.out.println(userAddressList);
}
}
测试类:
import com.cjian.gmall.service.OrderService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class ConsumerTest {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext(
"consumer.xml");
OrderService orderService = ioc.getBean(OrderService.class);
orderService.initOrder("1");
//观察管理台使用
System.in.read();
}
}
我们启动zookeeper集群,然后依次启动服务提供方,服务调用方:
成功完成调用
管理台情况: