Dubbo进阶(三)——Dubbo配置方式详解_dubbo框架不能用@resource(1)

面试准备+复习分享:

为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦

秋招|美团java一面二面HR面面经,分享攒攒人品

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

Write to Console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n

#Write to File
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${catalina.home}log/provider.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n


在 `interface` 模块中创建接口 `com.chanshuyi.service.IUserService`:



package com.service;
public interface IUserService {
public boolean login(String username, String password);
}


`interface` 模块配置完毕。


在 `provider` 模块中引入 `Spring`、`Dubbo`、`interface` 模块依赖:



<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
<springframework.version>4.1.6.RELEASE</springframework.version>
<commonsLogging.version>1.2</commonsLogging.version>

<dependencies>
    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\*\* Spring 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\*\* -->
    <!-- 添加Spring-core包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- 添加spring-tx包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- Spring ORM 相关-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- 添加spring-jdbc包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!--添加spring-web包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- 添加spring-context包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>${commonsLogging.version}</version>
    </dependency>
    <!--添加aspectjweaver包 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.5</version>
    </dependency>
    <!-- \*\*\*\*\*\*\*\*\*\*\* /Spring 依赖 \*\*\*\*\*\*\*\*\*\* -->

    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Dubbo 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.3.3</version>
        <exclusions>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* /Dubbo 依赖 \*\*\*\*\*\*\*\*\*\*\*\* -->

    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* interface 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\*\* -->
    <dependency>
        <groupId>com.chanshuyi.DubboDemo</groupId>
        <artifactId>interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\* /interface 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\* -->
</dependencies>

创建`com.service.impl.UserServiceImpl` 类,实现`IUserService` 接口:



package com.service.impl;
import com.service.IUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service(“userService”)
public class UserServiceImpl implements IUserService {

private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

@Override
public boolean login(String username, String password) {
    logger.info("用户登录:[username:{}, password:{}]", username, password);
    if (username != null && password != null && username.equals(password)) {
        logger.info("用户校验通过。[username:{}]", username);
        return true;
    }
    logger.info("用户校验失败![username:{}]", username);
    return false;
}

}


创建 `Spring` 配置文件,配置注解扫描 `com.service.impl` 包,并引入 `spring-provider.xml` 文件:



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

**注意: 这里不要写成 `com.service.impl`.否则无法成功扫描!**


创建 `spring-provider.xml` 文件,它是 `dubbo` 的主要配置文件。



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

可以看到这里有几个关键参数:`application`、`registry`、`protocol`、`service`。


* `application` 指当前应用名称,主要用来给`zookeeper`注册中心计算应用间依赖关系。
* `registry` 用来声明一个注册中心,这里声明了一个id 为dubbodemo的注册中心,地址是本地服务器的 `2181` 端口(这里要与 `zookeeper` 配置文件的 `clientPort` 属性值一致)。
* `protocol` 指该应用使用 `dubbo` 协议在 `28080` 端口暴露服务,其他应用可以通过这个接口调用服务。
* `service` 用来声明需要暴露的服务接口,这里暴露了IUserService 接口,并将接口注册到 id 为 dubbodemo 的注册中心,它引用了 `Spring` 中名为 userService 的类,超时时间为 3 秒。


到这里 `provider` 提供者的配置基本上完成,但我们还需要写一个启动类将 `provider` 启动起来提供服务。


创建`com.util.BeanFactoryUtil.java`,是加载 `Spring` 的工具类:



package com.util;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanFactoryUtil {
private static ApplicationContext ctx_producer = null;
public final static String ApplicationContextRoot = “”;
public final static String ApplicationContextPath = ApplicationContextRoot + “applicationContext.xml”;
public static void init() {
if (ctx_producer == null) {
synchronized (BeanFactoryUtil.class) {
if(ctx_producer == null){
String[] configLocations = new String[]{ApplicationContextPath};
ctx_producer = new ClassPathXmlApplicationContext(configLocations);
}
}
}
}
public static ApplicationContext getContext() {
init();
return ctx_producer;
}
}


创建`com.chanshuyi.util.SystemDetails.java`,用于输出系统信息:



package com.util;
import java.text.SimpleDateFormat;import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class SystemDetails {
/**
* 输出系统基本信息
*/
public static void outputDetails() {
timeZone();
currentTime();
os();
}

/\*\*

* 输出系统时区
*/
private static void timeZone() {
Calendar cal = Calendar.getInstance();
TimeZone timeZone = cal.getTimeZone();
System.out.println(“系统时区:” + timeZone.getDisplayName());
}

/\*\*

* 输出系统时间
*/
private static void currentTime() {
String fromFormat = “yyyy-MM-dd HH:mm:ss”;
SimpleDateFormat format = new SimpleDateFormat(fromFormat);
Date myDate = new Date();
System.out.println(“系统时间:” + format.format(myDate));
}

/\*\*

* 输出系统基本配置
*/
private static void os() {
String osName = System.getProperty(“os.name”); //操作系统名称
System.out.println(“当前系统:” + osName);
String osArch = System.getProperty(“os.arch”); //操作系统构架
System.out.println(“当前系统架构” + osArch);
String osVersion = System.getProperty(“os.version”); //操作系统版本
System.out.println(“当前系统版本:” + osVersion);
}
}


创建`com.Launcher.java`,用于启动 `provider` 服务,是启动入口:



package com;
import com.util.BeanFactoryUtil;
import com.util.SystemDetails;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Launcher {
private static Log logger = LogFactory.getLog(Launcher.class);
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(“=“);
System.out.println(” Core包启动 “);
SystemDetails.outputDetails();
System.out.println(”
=”);

    getLocalip();
    // 初始化spring
    logger.info("开始初始化core服务");
    BeanFactoryUtil.init();

    try{
        System.in.read();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/\*\*

* 取得本机ip地址 注意:Spring RmiServiceExporter取得本机ip的方法:InetAddress.getLocalHost()
*/
private static void getLocalip() {
try {
System.out.println("服务暴露的ip: "
+ java.net.InetAddress.getLocalHost().getHostAddress());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}


到这里 `provider` 模块配置结束。我们运行 Launcher.main() 方法启动服务,并打开 `zookeeper` 注册中心,启动 `provider` 服务。


接下来我们编写 `consumer` 代码。  
 在 `consumer` 的 `pom.xml` 中导入 `Spring`、`dubbo`、`interface` 模块依赖。



<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
<springframework.version>4.1.6.RELEASE</springframework.version>
<commonsLogging.version>1.2</commonsLogging.version>

<dependencies>
    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\* Spring 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* -->
    <!-- 添加Spring-core包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- 添加spring-tx包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- Spring ORM 相关-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- 添加spring-jdbc包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!--添加spring-web包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- 添加spring-context包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>${commonsLogging.version}</version>
    </dependency>
    <!--添加aspectjweaver包 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.5</version>
    </dependency>
    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* /Spring 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* -->

    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Dubbo 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.3.3</version>
        <exclusions>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\* /Dubbo 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\* -->

    <!-- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* interface 依赖 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* -->
    <dependency>
        <groupId>com.chanshuyi.DubboDemo</groupId>
        <artifactId>interface</artifactId>

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

[外链图片转存中…(img-aYBo75lf-1715282991254)]

[外链图片转存中…(img-7jtRHupm-1715282991254)]

[外链图片转存中…(img-GeWNBvl4-1715282991255)]

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值