首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Dubbo的两种常规启动方式

Dubbo的两种常规启动方式

作者头像
田维常
发布于 2019-12-25 10:38:08
发布于 2019-12-25 10:38:08
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

本案例是dubbo版本:2.7.4.1 org.apache.dubbo

建一个工程为dubbo-demo,再创建三个module

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dubbo-user-api
dubbo-user-provider
dubbo-user-consumer

dubbo-user-api

DemoService.java接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.tian.dubbo.service;

public interface DemoService {
    String test(String string);
}

然后打成jar给dubbo-user-providerdubbo-user-consumer使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn clean install

dubbo-user-api.jar

启动zookeeper

本地启动一个zookeepeer,作为dubbo注册中心,(dubbo推荐zookeeper为注册中心)

dubbo-user-provider

pom.xml中添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <properties>
        <dubbo.version>2.5.3</dubbo.version>
        <spring.version>4.3.6.RELEASE</spring.version>
        <java.version>1.8</java.version>
        <log4j.version>1.2.17</log4j.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <artifactId>dubbo-user-api</artifactId>
            <groupId>com.tian.dubbo</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

创建一个DemoServiceImpl.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class DemoServiceImpl implements DemoService {
    @Override
    public String test(String msg) {
        System.out.println("接收到参数:" + msg);
        return "provider:" + msg;
    }
}

创建启动类ProviderApplication.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ProviderApplication {
    private static String zookeeperHost = System.getProperty("zookeeper.address", "127.0.0.1");

    public static void main(String[] args) throws Exception {
        ServiceConfig<DemoService> service = new ServiceConfig<>();
        service.setApplication(new ApplicationConfig("first-dubbo-provider"));
        service.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181"));
        service.setInterface(DemoService.class);
        service.setRef(new DemoServiceImpl());
        service.export();
        System.out.println("Dubbo server started");
        new CountDownLatch(1).await();
    }
}

启动

输出:Dubbo server started

启动成功,等着消费方调用。下面来说说消费方

dubbo-user-consumer

pom.xml添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <properties>
        <dubbo.version>2.5.3</dubbo.version>
        <spring.version>4.3.6.RELEASE</spring.version>
        <java.version>1.8</java.version>
        <log4j.version>1.2.17</log4j.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <artifactId>dubbo-user-api</artifactId>
            <groupId>com.tian.dubbo</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
    </dependencies>

启动类ConsumerApplication.java

启动并调用

输出:provider:dubbo

dubbo-user-provider中输出:接收到参数:dubbo

xml方式

provider

provider.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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="provider"/>
    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://localhost:2181" protocol="zookeeper" check="false"/>
    <!-- 用dubbo协议在随机端口暴露服务 -->
    <dubbo:protocol id="dubbo" name="dubbo" port="-1" threads="200" />
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.tian.dubbo.service.DemoService" ref="demoService"/>
    <!-- 和本地bean一样实现服务 -->
    <bean id="demoService" class="com.tian.dubbo.service.impl.DemoServiceImpl"/>
</beans>

启动类ProviderApplication.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ProviderApplication {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new          
                   ClassPathXmlApplicationContext("provider.xml");
        System.err.println(context.getDisplayName() + ": here");
        context.start();
        System.err.println("服务已经启动...");
        System.in.read();
    }
}

log4j.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n" />
        </layout>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="CONSOLE" />
    </root>
</log4j:configuration>

启动输出:

consumer

ConsumerApplication.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ConsumerApplication {
  public static void main(String[] args) {
      //测试常规服务
      ClassPathXmlApplicationContext context =
              new ClassPathXmlApplicationContext("consumer.xml");
      context.start();
      System.err.println("consumer start");
      DemoService demoService = context.getBean(DemoService.class);
      System.out.println(demoService.test("dubbo xml"));
  }
}

consumer.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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="demotest-consumer" owner="programmer" organization="dubbox"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
    <dubbo:reference id="demoService" interface="com.tian.dubbo.service.DemoService"/>
</beans>

log4j.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n" />
        </layout>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="CONSOLE" />
    </root>
</log4j:configuration>

启动输出:

证明调用成功,再看provider的输出

自此,一个xml版本的dubbo demo搞定。

注解方式

provider

DemoServiceImpl.java中的@Service使用的是org.apache.dubbo下面的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.tian.dubbo.service.DemoService;
import org.apache.dubbo.config.annotation.Service;
@Service
public class DemoServiceImpl implements DemoService {
    @Override
    public String test(String msg) {
        System.out.println("接收到参数:" + msg);
        return "provider:" + msg;
    }
}

启动类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;

@Configuration
@EnableDubbo(scanBasePackages = "com.tian.dubbo.service.impl")//扫描添加了@Service的注解
@PropertySource("classpath:dubbo-provider.properties")//配置文件的扫描
public class ProviderApplication {
    
    public static void main(String[] args) throws IOException {
        AnnotationConfigApplicationContext context = new 
             AnnotationConfigApplicationContext(ProviderApplication.class);
        context.start();
        System.err.println("服务已经启动...");
        System.in.read(); //需要等待
    }
}

dubbo-provider.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dubbo.application.name=annotation-provider
dubbo.registry.address=zookeeper://localhost:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

启动

consumer

dubbo-consumer.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dubbo.application.name=annotation-consumer
dubbo.registry.address=zookeeper://localhost:2181
dubbo.consumer.timeout=3000
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.tian.dubbo.service.DemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@EnableDubbo(scanBasePackages = "com.tian.dubbo")//启用Dubbo扫描并注入对象
@PropertySource("classpath:dubbo-consumer.properties")//扫描配置文件
public class ConsumerApplication {
    
    //这里需要使用Dubbo来进行注入
    @Reference
    DemoService demoService;

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new 
            AnnotationConfigApplicationContext(ConsumerApplication.class);
        ConsumerApplication customer = context.getBean(ConsumerApplication.class);
        String say = customer.demoService.test("dubbo annotation");
        System.out.println(say);
    }
}

启动

调用成功。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
DirectX Repair增强版下载,DLL修复工具大全
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。
小焱
2025/07/19
6030
DirectX Repair增强版下载,DLL修复工具大全
windows10/11系统无法运行红色警戒2,ddraw.dll文件丢失,80070057,死机,卡死等问题修复大全
红色警戒2问题比较多,但基本都是同一样的问题,比如dll相关的文件丢失问题,只需要专业的dll修复工具修复一下就行,网上到处找ddraw.dll这类文件太累了。
小焱
2025/07/14
5120
windows10/11系统无法运行红色警戒2,ddraw.dll文件丢失,80070057,死机,卡死等问题修复大全
DirectX修复工具,解决WeGame打不开,Wegame界面英雄联盟点击启动没反应,解决方法
其实很多人重装游戏后,打开还是会出现这个问题,那是因为卸载的时候就没卸载干净,游戏一些常用配置,注册信息还留在原有系统里面,所以重装游戏后还是会出现这个问题。
小焱
2025/07/09
2640
DirectX修复工具,解决WeGame打不开,Wegame界面英雄联盟点击启动没反应,解决方法
缺少dll文件,msvcp120,msvcp140,vcruntime140,d3d9,d3d11,0xC0000005,msvcp系列等报错信息?
主要解决在去百度搜索这种“运行库”、“dll缺少”出来的全是广告的问题,所以提供一些免费下载修复问题的解决办法。
小焱
2025/07/13
1530
缺少dll文件,msvcp120,msvcp140,vcruntime140,d3d9,d3d11,0xC0000005,msvcp系列等报错信息?
打印机共享修复工具,0x0000011B,0x00000709,0x00000BCD等问题
软件提供的是错误代码的解决方案,并且得到过实际验证的不要拿着那些所谓的打印机共享修复工具来比较瞎猫碰死耗子跟对症下药区别很大!
小焱
2025/07/20
3100
打印机共享修复工具,0x0000011B,0x00000709,0x00000BCD等问题
免费的dll修复工具,dll下载,dll文件下载,DirectX修复工具增强版
本程序适用于多个操作系统,如Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10、Windows 11,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。
小焱
2025/07/01
1.3K0
免费的dll修复工具,dll下载,dll文件下载,DirectX修复工具增强版
DirectX Repair(DirectX修复工具)官方中文增强版V4.1.0.30770 | directx repair修复工具增强版下载[通俗易懂]
directx repair修复工具增强版是一款专业优秀效果确凿的系统级DirectX修复工具,专门针对并近乎完美的修复0xc000007b进不了系统以及0xc000007b蓝屏问题,采用傻瓜式一键设计,界面简洁大方,使用也非常简单,大家只需要点击主界面上的“检测并修复”按钮,directx repair就会自动完成校验、当前系统DirectX状态检测、下载、修复以及注册的全部功能,若发现异常则会提醒大家进行修复,所以无需担心directx repair怎么用的问题,威航软件园提供的directxrepair最新版本中包含了Microsoft的数字签名的DirectX redist,大家可以放心使用,需要注意的是directx repair增强版是基于net框架开发,故大家的电脑中需要安装.net framework2.0及以上版本的netframework安装环境才能正常运行,威航软件园提供最新版本的directx repair修复工具增强版下载。(百度云盘分享密码:7a8k)
全栈程序员站长
2022/09/06
5.4K0
DirectX Repair(DirectX修复工具)官方中文增强版V4.1.0.30770 | directx repair修复工具增强版下载[通俗易懂]
DirectX修复工具V4.1公测![通俗易懂]
DirectX修复工具V4.1版现已正式发布,欢迎下载。传送门:标准版、增强版、在线修复版
全栈程序员站长
2022/07/01
4.3K0
DirectX修复工具V4.1公测![通俗易懂]
DirectX修复工具 4.0 标准版[通俗易懂]
DirectX修复工具是一款专用于修复系统异常的工具,DirectX修复工具还是一款使用简单易上手操作且绿色、可免安装的修复工具。使用DirectX修复工具可自动更新C++组件且完美修复0xc000007b问题异常。如果你的电脑出现了DirectX的异常问题,可直接下载DirectX修复工具进行修复解决。
全栈程序员站长
2022/09/06
4.6K0
DirectX修复工具 4.0 标准版[通俗易懂]
directx修复工具是干嘛的_win10自带dll修复
For English version, please refer to the bottom of this page.
全栈程序员站长
2022/08/03
3.3K0
directx修复工具是干嘛的_win10自带dll修复
服务器版dll修复工具,dll修复工具「建议收藏」
winmm.dll是Windows多媒体相关应用程序接口,用于低档的音频和游戏手柄,缺少它可能造成部分软件无声音。当你的电脑提示“丢失winmm.dll”或者“没有找到winmm.dll”等类似错误信息。
全栈程序员站长
2022/09/05
3.1K0
【说站】DirectX Repair修复电脑DLL工具v4.1 游戏必备神器
DirectX修复工具(DirectX Repair)是一款系统级工具软件,绿色简便易用,无需安装,可直接运行。主要功能是检测当前系统的DirectX组件及VC++库文件状态,发现异常则进行修复。程序采用易用的一键式设计,只要点“检测并修复”,它就会自动完成校验、检测、下载、修复以及注册全部功能,无需用户介入,大大降低使用难度。在常规修复过程中,程序还会自动检测DirectX加速状态,在异常时给予用户相应提示。
很酷的站长
2022/11/25
4K52
【说站】DirectX Repair修复电脑DLL工具v4.1 游戏必备神器
Win10安装程序修复计算机,directx修复工具win10最新版
directx修复工具win10最新版是一款以排除电脑软件异常导致的无法正常使用问题而特别打造的优质工具。全自动的智能检测修复功能能够确保用户们因为程序问题而导致的电脑异常无法使用都得到解决。
全栈程序员站长
2022/09/06
1.4K0
Win10安装程序修复计算机,directx修复工具win10最新版
如何手动修复DLL丢失?dll文件丢失怎么恢复?教你多种方法修复directx缺失!
在Windows操作系统中,DLL(动态链接库)文件扮演着至关重要的角色。它们是包含可被多个程序同时使用的代码和数据的集合体,是系统正常运行不可或缺的组成部分。然而,有时我们可能会遇到DLL文件丢失或损坏的情况,导致程序无法正常运行或系统出现错误。
科技测评师001
2024/08/01
5760
如何手动修复DLL丢失?dll文件丢失怎么恢复?教你多种方法修复directx缺失!
vcomp100.dll 丢失如何解决 vcomp100.dll 修复
当我们打开软件或者游戏的时候,电脑提示vcomp100.dll缺失,或者找不到vcomp100.dll文件,这种要怎么修复呢?让人非常的挠头。vcomp100.dll是电脑系统中重要的动态链接库文件,文件丢失会导致电脑无法运行应用程序,从而影响用户的正常使用。下面小编就给大家分享两个解决方法。
小焱
2025/05/25
3650
vcomp100.dll 丢失如何解决 vcomp100.dll 修复
推荐阅读
相关推荐
DirectX Repair增强版下载,DLL修复工具大全
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档