赞
踩
spring boot 集成 dubbo后yml配置如何写呢,下面就跟我一起看看。
三个module:
首先在spring-boot-dubbo-share模块中定义个一个接口
【强调】:
1.zookeeper的地址,替换成你们自己的,如果没有则写 N/A
2.share包需要被provider和consumer模块引入
3.消费者如果写了@Reference(url = "dubbo://localhost:28080"),那么会忽略注册中心的地址,走直连
- package com.share.service;
-
- /**
- * @Author: zj
- * @Date: 2019-09-23
- * @Version 1.0
- */
- public interface IDubboPrintService {
- String print(String string);
- }
完成之后,记得maven点击clean->package->install,方便后面的provder和consumer模块引用。
然后在spring-boot-dubbo-provider提供服务
首先pom.xml配置如下(注意:把第一步中的share模块引入进去),我这里没写出来,毕竟你的jar包名跟我的不一样
- ......
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <maven.compiler.source>1.8</maven.compiler.source>
- <maven.compiler.target>1.8</maven.compiler.target>
- <java.version>1.8</java.version>
- <dubbo.version>2.7.1</dubbo.version>
- </properties>
-
- <dependencies>
- ...
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>${dubbo.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo</artifactId>
- <version>${dubbo.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-dependencies-zookeeper</artifactId>
- <version>${dubbo.version}</version>
- <type>pom</type>
- </dependency>
- ...
- ...
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>

yaml文件配置:
- server:
- port: 8080
- servlet:
- context-path: /
-
- # -------------------- Dubbo 配置 BEGIN --------------------
- dubbo:
- # registry: # 单注册中心,注意属性级别:dubbo.registry,注意多注册中心格式:@Service(registry = {"registry1","registry2","registry3"})
- # register: false # true(默认), false:表示服务不注册到注册中心(只订阅,直连服务正常),且dubbo-admin不显示
- # address: zookeeper://127.0.0.1:2181
- registries: # 多注册中心,注意属性级别:dubbo.registries, 不同的方法可以用@Service(registry = {"registry2"}),指定不同的注册中心
- provider1:
- register: false #默认true, false:表示服务不注册到注册中心
- address: zookeeper://55.55.55.82:2181
- provider2:
- register: false
- address: zookeeper://55.55.55.196:2181
- provider3:
- register: false
- address: zookeeper://55.55.55.139:2181
- application:
- name: myProvider
- # qos-enable: true # 默认值 true, 是否允许在线运维, 配置和查询服务
- # qos-port: 22222 # 默认值2222
- # qos-accept-foreign-ip: false # 默认false , 不允许远程访问 telnet
- scan:
- base-packages: com.privder.serivce
- protocol:
- name: dubbo
- port: 28080
- provider:
- retries: 0 # 服务提供者无需重试
- timeout: 6000 # 默认只有1s
- # -------------------- Dubbo 配置 END --------------------

目录结构
注意:开启EnableDubbo这个注解
- package com.privder;
-
- import com.share.util.ServletContextUtil;
- import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
- import org.springframework.context.annotation.Import;
-
-
- @SpringBootApplication
- @EnableDubbo
- @Import(ServletContextUtil.class)
- public class DubboProviderApplication extends SpringBootServletInitializer {
-
- public static void main(String[] args) {
- SpringApplication.run(DubboProviderApplication.class, args);
- }
- }

- package com.privder.serivce.impl;//package com.cmb.service.dubbo.provider;
-
- import com.share.service.IDubboPrintService;
- import org.apache.dubbo.config.annotation.Service;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
-
- // registry指定注册中心,默认是全部
- // @Service(registry = {"provider1","provider3"})
- @Service(group = "project-dubbo-provider", version = "1.0.0", registry = {"provider1", "provider2", "provider3"})
- @org.springframework.stereotype.Service("DP.PrintService1")
- public class IDubboPrintServiceImpl implements IDubboPrintService {
- private static final Logger logger = LoggerFactory.getLogger(IDubboPrintServiceImpl.class);
-
- @Override
- public String print(String str) {
- logger.info("{}-{}-{}:{}", "project1", "1.0.0", "provider1 provider2 provider3", str);
- return "provider1+provider2+provider3";
- }
- }

接下来完成spring-boot-dubbo-consumer模块
pom.xml跟provder类似,记得把dubbo-starter依赖加进去
消费者的yaml配置如下:
- server:
- port: 8081
- servlet:
- context-path: /
-
- # -------------------- Dubbo 配置 BEGIN --------------------
- dubbo:
- # registry: # 单注册中心,注意属性级别:dubbo.registry
- # register: false # true(默认), false:表示服务不注册到注册中心(只订阅,直连服务正常),且dubbo-admin不显示
- # address: zookeeper://127.0.0.1:2181
- registries: # 多注册中心
- # consumer1:
- # register: true #默认,false:表示服务不注册到注册中心
- # address: N/A
- # consumer2:
- # address: N/A
- # consumer3:
- # address: N/A
- consumer1:
- register: false #表示服务不注册到注册中心(此时下面的地址不会使用,因为comsume走直连)
- address: zookeeper://55.55.55.82:2181
- consumer2:
- register: false #false:表示服务不注册到注册中心(此时下面的地址不会使用,因为comsume走直连)
- address: zookeeper://55.55.55.196:2181
- consumer3:
- register: false #false:表示服务不注册到注册中心(此时下面的地址不会使用,因为comsume走直连)
- address: zookeeper://55.55.55.139:2181
- application:
- name: myConsumer
- scan:
- base-packages: com.consumer.service
- consumer:
- timeout: 3000
- check: false # 默认true.服务启动时候检查是否可用,服务不可用时无法启动项目, false则不检查
- retries: 2 # 服务重试次数
- # -------------------- Dubbo 配置 END --------------------

目录结构
- package com.consumer;
-
- import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-
-
- @SpringBootApplication
- @EnableDubbo
- public class DubboConsumerApplication extends SpringBootServletInitializer {
-
- public static void main(String[] args) {
- SpringApplication.run(DubboConsumerApplication.class, args);
- }
- }

- package com.consumer.service.impl;//package com.cmb.service.consumer;
-
- import com.share.service.IDubboPrintService;
- import org.apache.dubbo.config.annotation.Reference;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
- /**
- * @Author: z信息
- * @Date: 2019-11-08
- * @Version 1.0
- */
-
- @org.springframework.stereotype.Service
- public class DubboPrintConsumer {
-
- private static final Logger logger = LoggerFactory.getLogger(DubboPrintConsumer.class);
-
- // project1 与provider中的group名保持一致
- // @Reference(group = "project1", version = "1.0.0",url = "127.0.0.1:2181")
- // consumer 相当于xml中的 reference id
- // 如果不是直连,去掉 url = "dubbo://localhost:28080"
- @Reference(url = "dubbo://localhost:28080", group = "project-dubbo-provider", version = "1.0.0", registry = {"consumer1", "consumer2", "consumer3"})
- private IDubboPrintService printService1;
-
- public IDubboPrintService getPrintService1() {
- return printService1;
- }
-
- }

- package com.consumer.controller;
-
- import com.consumer.service.impl.DubboPrintConsumer;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- /**
- * @Date: 2019-08-29
- * @Version 1.0
- */
-
- @RestController
- public class Controller {
- private static final Logger logger = LoggerFactory.getLogger(Controller.class);
-
- @Autowired
- private DubboPrintConsumer dubboPrintConsumer;
-
- @GetMapping(value = "/dubboPrint", produces = "application/json; charset=UTF-8")
- public String dubboPrint() {
- String fromProvider= dubboPrintConsumer.getPrintService1().print("consumer1,consumer3");
- logger.info("Call Provider Success: {}", fromProvider);
- return "success";
- }
- }

配置完成后,启动应用,访问:http://localhost:8081/dubboPrint
至此基本功能介绍完了。
顺便说一句:在我参与的大型app后台项目中,实际上这种dubbo-starter的yaml配置写法其实不常用。
一般还是用【xml】dubbo-provider.xml和dubbo-comsumer.xml来配置。
原因:简单直接明了
下面分享一下我在实际工作中遇到的坑:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。