<!-- dubbo包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<!-- 排除dubbo自带的spring和netty,使用项目的,如果本身项目没有,无需排除 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper包 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<type>pom</type>
</dependency>
<!-- curator(zookeeper的客户端)包 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
还需要在相关配置文件加上 dubbo 的 bean 的头部约束,将下面的添加到 bean 头部即可:
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
- 1
- 2
- 3
- 4
4.1 服务提供方代码
对于服务提供方,如果我们想要 TbItemService 对外提供服务:
package jit.wxs.service.impl;
import jit.wxs.pojo.TbItem;
import jit.wxs.mapper.TbItemMapper;
import jit.wxs.service.TbItemService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
- <p>
- 商品表 服务实现类
- </p>
- @author jitwxs
- @since 2018-03-21
*/
@Service
public class TbItemServiceImpl extends ServiceImpl<TbItemMapper, TbItem> implements TbItemService {
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
需要修改 spring 关于 service 的配置文件,加入 dubbo 的配置信息:
<?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" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><span class="token comment"><!-- 扫描service层注解 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">context:</span>component-scan</span> <span class="token attr-name">base-package</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jit.wxs.service<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span> <span class="token comment"><!-- dubbo发布服务 --></span> <span class="token comment"><!-- 提供方应用信息,用于计算依赖关系 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">dubbo:</span>application</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>e3-manager<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token comment"><!-- 配置zookeeper的地址,集群地址用逗号隔开 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">dubbo:</span>registry</span> <span class="token attr-name">protocol</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>zookeeper<span class="token punctuation">"</span></span> <span class="token attr-name">address</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>192.168.30.145:2181<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token comment"><!-- 用dubbo协议在20880端口暴露服务 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>dubbo<span class="token punctuation">"</span></span> <span class="token attr-name">port</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>20880<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token comment"><!-- 声明需要暴露的服务接口 ref:为注入的对应接口的bean timneout:超时时间,单位ms,开发模式可以设长一点方便debug --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jit.wxs.service.TbItemService<span class="token punctuation">"</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>tbItemServiceImpl<span class="token punctuation">"</span></span> <span class="token attr-name">timeout</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>600000<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
-
dubbo:application:提供方的应用名 -
dubbo:registry:注册中心的类型和地址 -
dubbo:protocol:这个服务要暴露在哪个端口上(使用方根据这个端口使用服务) -
dubbo:service:设置暴露的服务的接口,ref 为该接口的 bean,timeout 为超时时间
4.2 服务使用方代码
服务使用方,我使用 Spring MVC 来实现,修改 Spring MVC 的配置文件,加入 dubbo 的配置:
<?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”
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-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd”>
<span class="token comment"><!-- 扫描组件 --></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">context:</span>component-scan</span> <span class="token attr-name">base-package</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jit.wxs.web<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>
<span class="token comment"><!-- 注解驱动 --></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">mvc:</span>annotation-driven</span> <span class="token punctuation">/></span></span>
<span class="token comment"><!-- 全局异常类 --></span>
<span class="token comment"><!--<bean class="cn.edu.jit.exception.GlobalExceptionResolver"/>--></span>
<span class="token comment"><!-- 视图解析器 --></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>bean</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.springframework.web.servlet.view.InternalResourceViewResolver<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>prefix<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/WEB-INF/jsp/<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>suffix<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>.jsp<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>bean</span><span class="token punctuation">></span></span>
<span class="token comment"><!-- 引用dubbo服务 --></span>
<span class="token comment"><!-- 使用方应用信息,用于计算依赖关系 --></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">dubbo:</span>application</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>e3-manager-web<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>
<span class="token comment"><!-- 指定zookeeper的地址,集群用逗号分隔 --></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">dubbo:</span>registry</span> <span class="token attr-name">protocol</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>zookeeper<span class="token punctuation">"</span></span> <span class="token attr-name">address</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>192.168.30.145:2181<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>
<span class="token comment"><!-- 申明要访问的接口,并创建代理对象,注入bean,名为id的值 --></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jit.wxs.service.TbItemService<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>tbItemService<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
-
dubbo:application: 使用方的应用名 -
dubbo:registry:注册中心的类型和地址 -
dubbo:reference:要使用的服务的接口,并将返回的注入 bean,名称为id设的值
如果配置没有问题的话,现在使用方已经能够使用提供方提供的服务了,直接将 tbItemService 注入进来即可:
package jit.wxs.web;
import jit.wxs.pojo.TbItem;
import jit.wxs.service.TbItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
-
<p>
-
商品表 前端控制器
-
</p>
-
@author jitwxs
-
@since 2018-03-21
*/
@RestController
@RequestMapping("/items")
public class TbItemController {
@Autowired
private TbItemService tbItemService;@GetMapping("/{id}")
public TbItem getItemById(@PathVariable Long id) {
TbItem item = null;
if(id != null) {
item = tbItemService.selectById(id);
}<span class="token keyword">return</span> item<span class="token punctuation">;</span>}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
五、测试
服务器上分别启动 zookper 和 tomcat:
[email protected]:/usr/zookeeper-3.5.2-alpha/bin$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[email protected]:/usr/zookeeper-3.5.2-alpha/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
[email protected]:/usr/apache-tomcat-8.5.28/bin$ ./startup.sh
Using CATALINA_BASE: /usr/apache-tomcat-8.5.28
Using CATALINA_HOME: /usr/apache-tomcat-8.5.28
Using CATALINA_TMPDIR: /usr/apache-tomcat-8.5.28/temp
Using JRE_HOME: /usr/jdk1.8.0_161/jre
Using CLASSPATH: /usr/apache-tomcat-8.5.28/bin/bootstrap.jar:/usr/apache-tomcat-8.5.28/bin/tomcat-juli.jar
Tomcat started.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
使用下面命令可以持续显示 tomcat 的输出:
[email protected]:/usr/apache-tomcat-8.5.28/bin$ tail -f …/logs/catalina.out
分别启动服务提供方的项目和服务使用方的项目:
测试下 /items/{id} 这个API:
成功!下面再访问下监控中心,因为监控中心和 zookeeper 在一台服务器上,我的 tomcat 部署在 8888 端口,即访问 192.168.30.145:8080/dubbo-admin 即可,用户名密码默认为 root:
查看所有注册的服务:
查看包括消费者和提供者的所有应用名:
消费者、提供者详细信息:
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7b4cdcb592.css" rel="stylesheet">
</div>
</article>
转载至 https://blog.csdn.net/yuanlaijike/article/details/79654183