Dubbo实例

zookeeper的安装及配置

(1)下载地址

zookeeper下载地址Home page of The Apache Software Foundationhttps://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz

(2)windows系统和Linux系统下zookeeper的安装及配置

1、下载好后解压文件,进入目录:apache-zookeeper-3.5.9-bin/conf

2、配置zookeeper配置文件,先把zoo_sample.cfg配置样本复制一份重命名为zoo.cfg

3、zookeeper使用的jetty占用到了8080端口,如需要修改可进入conf/zoo.cfg配置文件里面添加:admin.serverPort=指定端口

4、启动方式:

        windows系统:apache-zookeeper-3.5.9-bin/bin/zkServer.cmd,双击运行

        linux系统:进入到bin目录下,运行命令:

                启动:zkServer.sh start

                关闭:zkServer.sh stop

创建Dubbo项目

(1)新建一个空项目,命名为:dubbo-project

(2) 创建"接口"模块,选择maven类型,命名为:dubbo-interface

   

(3) 参考步骤1,创建"服务提供者"模块,选择maven类型,命名为:dubbo-provider

(4) 参考步骤1,创建"消费者"模块,选择maven类型,命名为:dubbo-consumer

编写测试代码

(1)dubbo-interface

a. 目录结构

b. User.java

package com.heheda.www.model;

import java.io.Serializable;

/**
 * Description:
 *
 * @date:2021/10/10 18:45
 * @author:呵呵哒
 */
public class User implements Serializable {

    private Integer id;

    private String username;

    private Integer age;

    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

c.  UserService.java 

package com.heheda.www.service;

import com.heheda.www.model.User;

/**
 * Description:
 *
 * @date:2021/10/19 12:35
 * @author:呵呵哒
 */
public interface UserService {

    /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    User queryUserById(Integer id);

}

d. pom.xml 

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

<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.heheda.www</groupId>
  <artifactId>dubbo-interface</artifactId>
  <version>1.0.0</version>
  <packaging>war</packaging>

  <build>
    <plugins>
      <!--JDK1.8编译插件-->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

(2)dubbo-provider

a. 目录结构

b. UserServiceImpl.java

package com.heheda.www.service.impl;

import com.heheda.www.model.User;
import com.heheda.www.service.UserService;

/**
 * Description:
 *
 * @date:2021/10/26 18:01
 * @author:呵呵哒
 */
public class UserServiceImpl implements UserService {

    @Override
    public User queryUserById(Integer id) {
        User user = new User();
        user.setId(id);
        user.setAge(11);
        user.setUsername("version-1");
        return user;
    }
}

c. UserServiceImpl2.java

package com.heheda.www.service.impl;

import com.heheda.www.model.User;
import com.heheda.www.service.UserService;

/**
 * Description:
 *
 * @date:2021/10/26 18:01
 * @author:呵呵哒
 */
public class UserServiceImpl2 implements UserService {

    @Override
    public User queryUserById(Integer id) {
        User user = new User();
        user.setId(id);
        user.setAge(22);
        user.setUsername("version-2");
        return user;
    }
}

d. dubbo-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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!--声明dubbo服务提供者的名称:必须唯一-->
    <dubbo:application name="dubbo-provider"/>

    <!--声明dubbo的协议和端口号-->
    <dubbo:protocol name="dubbo" port="20880"/>

    <!--使用注册中心-->
    <dubbo:registry address="zookeeper://localhost:2181"/>

    <!--暴露接口服务-->
    <dubbo:service interface="com.heheda.www.service.UserService" ref="userServiceImpl" version="1.0.0"/>
    <dubbo:service interface="com.heheda.www.service.UserService" ref="userServiceImpl2" version="2.0.0"/>

    <!--加载接口实现类-->
    <bean id="userServiceImpl" class="com.heheda.www.service.impl.UserServiceImpl"/>
    <bean id="userServiceImpl2" class="com.heheda.www.service.impl.UserServiceImpl2"/>

</beans>

 e. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

  <!--加载配置文件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:dubbo-provider.xml</param-value>
  </context-param>
  <!--添加监听器-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

</web-app>

f. pom.xml

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

<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.heheda.www</groupId>
  <artifactId>dubbo-provider</artifactId>
  <version>1.0.0</version>
  <packaging>war</packaging>

  <dependencies>
    <!--Spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.16.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.16.RELEASE</version>
    </dependency>

    <!--Dubbo依赖-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.2</version>
    </dependency>

    <!--zookeeper依赖-->
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.1.0</version>
    </dependency>

    <!--引入接口工程-->
    <dependency>
      <groupId>com.heheda.www</groupId>
      <artifactId>dubbo-interface</artifactId>
      <version>1.0.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!--JDK1.8编译插件-->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

 (3)dubbo-consumer

a. 目录结构

b. UserController.java

package com.heheda.www.web;

import com.heheda.www.model.User;
import com.heheda.www.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Description:
 *
 * @date:2021/10/28 16:05
 * @author:呵呵哒
 */
@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private UserService userService2;

    @RequestMapping(value = "/userDetail")
    public String userDetail(Model model, Integer id){
        User user = userService.queryUserById(id);
        model.addAttribute("user",user);

        User user2 = userService2.queryUserById(id);
        model.addAttribute("user2",user2);

        return "userDetail";
    }

}

c. applicationContext.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描组件-->
    <context:component-scan base-package="com.heheda.www.web"/>

    <!--配置注解驱动-->
    <mvc:annotation-driven/>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

d. dubbo-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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!--声明dubbo服务提供者的名称:必须唯一-->
    <dubbo:application name="dubbo-consumer"/>

    <!--指定注册中心-->
    <dubbo:registry address="zookeeper://localhost:2181"/>

    <!--引用远程接口服务-->
    <dubbo:reference id="userService" interface="com.heheda.www.service.UserService" version="1.0.0"/>
    <dubbo:reference id="userService2" interface="com.heheda.www.service.UserService" version="2.0.0"/>
    
</beans>

e. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

  <!--配置中央调度器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--初始化参数-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml,classpath:dubbo-consumer.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

f. userDetail.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/10/28
  Time: 16:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户信息</title>
</head>
<body>
<h1>用户1</h1>
<div>${user.id}</div>
<div>${user.username}</div>
<div>${user.age}</div>

<h1>用户2</h1>
<div>${user2.id}</div>
<div>${user2.username}</div>
<div>${user2.age}</div>

</body>
</html>

g. pom.xml

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

<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.heheda.www</groupId>
  <artifactId>dubbo-consumer</artifactId>
  <version>1.0.0</version>
  <packaging>war</packaging>

  <dependencies>
    <!--Spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.16.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.16.RELEASE</version>
    </dependency>

    <!--Dubbo依赖-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.2</version>
    </dependency>

    <!--zookeeper依赖-->
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.1.0</version>
    </dependency>

    <!--引入接口工程-->
    <dependency>
      <groupId>com.heheda.www</groupId>
      <artifactId>dubbo-interface</artifactId>
      <version>1.0.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!--JDK1.8编译插件-->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

运行项目

(1)部署项目"dubbo-provider"到tomcat

(2)部署项目"dubbo-consumer"到tomcat 

参考【部署项目"dubbo-provider"到tomcat 】

修改:

        HTTP port: 8081

        JMX port: 1091

 (3)先启动zookeeper,再启动"dubbo-provider"和"dubbo-consumer"

浏览器访问:http://localhost:8081/userDetail?id=10086

得到如下结果:

添加监控中心:dubbo-admin

(1)dubbo-admin下载地址

GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbohttps://github.com/apache/dubbo-admin/

(2)导入项目

下载好dubbo-admin后解压得到"dubbo-admin-develop"目录,拷贝该目录到"dubbo-project"下

 再回到开发工具idea中,把刚刚的目录"dubbo-admin-develop"导入到项目中

 

(2)启动dubbo-admin

a. 启动"dubbo-admin-server"

修改配置参数,端口改为:8888

 修改完成后,直接运行"DubboAdminApplication.java"的main方式启动

b. 启动"dubbo-admin-ui"

修改配置参数,修改请求的端口为:8888

idea中打开终端,进入到"dubbo-admin-ui"目录中:

cd dubbo-admin-develop/dubbo-admin-ui

安装依赖包:npm install

如果下载依赖包太慢,可以改为淘宝镜像,输入命令即可:

npm config set registry https://registry.npm.taobao.org

依赖下载成功后,启动项目:npm run dev

启动成功后,点击控制台给的访问地址即可:

 账号密码在"dubbo-admin-server"的配置文件中可以配置,默认为root

 

项目代码

dubbo-project: 码云-呵呵哒https://gitee.com/hehedas_admin/dubbo-project

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呵呵哒~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值