淘先锋技术网

首页 1 2 3 4 5 6 7

今天整理springboot+dubbo+zookeeper在网上找了很多资料,记录一下自己搭建时候的心得
1.zookeeper提取文件提取码qazw
2.dubbo提取文件提取码qwer
springboot整合dubbo+zookeeper 也就是子项目为springboot 父级还是maven
首先创建一个父级maven
在这里插入图片描述
在这里插入图片描述
这个就是父类的结构
这个就是
父级pom 文件引入依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
        <!-- dubbo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <!-- zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

这样父类就好了接下来创建子类,就是在父类里创建module
在这里插入图片描述
首先创建一个公共的api接口工程:common-api 这个还是maven项目在这里插入图片描述
在这里插入图片描述
common-api结构
在这里插入图片描述
创建一个service接口在这之前 先加载一下pom文件
在这里插入图片描述
创建一个接口作为demo
在这里插入图片描述
这样公共接口就好了
接下来创建一个生产者,生产者就是springboot项目了
在这里插入图片描述
在这里插入图片描述
生产者结构
在这里插入图片描述
在pom文件中引入我们的公共接口和dubbo依赖,我搭建的时候有一个问题,就是springboot自带的logging一直显示冲突不能启动,然后我就讲logging去掉转而使用了log4j2作为日志

	<dependencies>
		<dependency>
			<groupId>com.demo</groupId>
			<artifactId>common-api</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!--log4j2-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

这是我的log4j2配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration monitorInterval="5">
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <!--变量配置-->
    <Properties>
        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
        <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!-- 定义日志存储的路径 -->
        <property name="FILE_PATH" value="./logs" />
        <!--这里value换成自己的项目名-->
        <property name="FILE_NAME" value="server-provider" />
    </Properties>

    <appenders>

        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
        <!--<File name="Filelog" fileName="D:\test\logs\test.log" append="false">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </File>-->

        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <!--<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
            &lt;!&ndash;控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)&ndash;&gt;
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                &lt;!&ndash;interval属性用来指定多久滚动一次,默认是1 hour&ndash;&gt;
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            &lt;!&ndash; DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖&ndash;&gt;
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>-->

        <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <!--<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
            &lt;!&ndash;控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)&ndash;&gt;
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                &lt;!&ndash;interval属性用来指定多久滚动一次,默认是1 hour&ndash;&gt;
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            &lt;!&ndash; DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖&ndash;&gt;
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>-->

        <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1-->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!--<SizeBasedTriggeringPolicy size="10MB"/>-->
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="365"/>
        </RollingFile>

    </appenders>

    <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
    <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>

        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </logger>
        <!--监控系统信息-->
        <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
        <Logger name="org.springframework" level="All" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>

        <root level="info">
            <appender-ref ref="Console"/>
            <!--<appender-ref ref="Filelog"/>-->
            <!--<appender-ref ref="RollingFileInfo"/>-->
            <!--<appender-ref ref="RollingFileWarn"/>-->
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>

</configuration>

application.properties配置文件

#当前服务/应用的名字
dubbo.application.name=user-service-provider

#注册中心的协议和地址

dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
#通信规则(通信协议和接口)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#连接监控中心
dubbo.monitor.protocol=registry
#开启包扫描,可替代 @EnableDubbo 注解
##dubbo.scan.base-packages=com.demo.dubbo-parent
#log4j2配置文件路径
logging.config=classpath:log4j2-spring.xml

server.port=8082

我们需要将启动类更改一下 需要几个一个dubbo注解@EnableDubbo这个是用于扫描service

@EnableDubbo
@SpringBootApplication
public class ServerProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServerProviderApplication.class, args);
	}

}

接下来我们就可以写我们的实体类了
在这里插入图片描述
service实体类里@Service注解一定要用dubbo的注解如果使用spring提供的注解那么dubbo将不能获取

@Service
public class DemoServiceImpl implements DemoService{
    @Override
    public String demo(String a) {
        return "成功"+a;
    }
}

这样生产者就可以启动了,我们打开dubbo网站看一下
在这里插入图片描述
这样就有了一个生产者
接下里创建一个消费者,也是一个springboot项目
消费者结构如下:
在这里插入图片描述
首先先导入pom依赖:其中包括我们的公共接口依赖,还是将logging换成了log4j2 配置文件一样

<dependencies>
		<dependency>
			<groupId>com.demo</groupId>
			<artifactId>common-api</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!--log4j2-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

application.properties配置文件

#避免和监控中心端口冲突,设为8081端口访问
server.port=8081  

dubbo.application.name=order-service-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
dubbo.monitor.protocol=registry

同样 消费者也需要更改启动文件加上@EnableDubbo注解

@EnableDubbo
@SpringBootApplication
public class ServerConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServerConsumerApplication.class, args);
	}

}

接下来就是创建一个controller类
在这里插入图片描述

@Controller
public class DemoController {
/*@Reference 必须是dubbo的注解*/
    @Reference
    private DemoService demoService;

    @RequestMapping(value = "demo",method = RequestMethod.GET)
    @ResponseBody
    public String demo(String a){
        return demoService.demo(a);
    }
}

这样生产者也就完成了 接下来就可以运行了
这样就产生了消费者
在这里插入图片描述
页面上访问一下,这样就成功搭建一个springboot+dubbo+zookeeper的微服务
在这里插入图片描述