Spring-Cloud-Alibaba笔记01-关于远程调用Dubbo

Spring-Cloud-Alibaba笔记01-关于远程调用Dubbo

Nacos既然连上了,当然是用试试远程调用的东东了!!!

使用Nacos本身的服务调用

好像也挺好用的,参数方法直接调用就可以了,用于访问远程Rest接口的。

推荐参考文章:https://www.jianshu.com/p/27a82c494413

这个比较简单,就是发个请求,URL地址使用服务名。

// ======================  启动类 ================================================
@EnableDiscoveryClient  // 服务发现
@SpringBootApplication
public class DemoApplication {

    //  这里这小段 就是需要的加上的东东了
	@LoadBalanced
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
 // ====================== 控制测试类 ============================================
	private final RestTemplate restTemplate;

	@Autowired
	public SampleController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

    // 提供的服务
	@RestController
	class EchoController {
		@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
		public String echo(@PathVariable String string) {
			return "Hello ,this is xiaohang-demo information : (#^.^#) Nacos Discovery " + string + "Hello " + userName + " " + age + "!";
		}
	}

    // 远程调用rest接口,使用服务名称。nacos会自行路由等。
	@RequestMapping("/getXhUser")
	public String getXhUser() {
		return restTemplate.getForObject("http://xh-demo/echo/" + "xiaohangTest", String.class);
	}
}

RestTemplate 就是个发送http请求的工具,而这里的不同用处,就是使用的URL并不是具体地址,而是nacos的服务名称。而已,就这样了 。。。。。


Dubbo

简单说就是,远程服务调用的。非Rest接口调用。

参考文章:https://segmentfault.com/a/1190000019896723 【超级详细的】

节点角色说明
节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器
整体步骤

使用的步骤还是很简单的,管它的实现细节复杂呢。

  • 部署启动Nacos服务;【上一篇有文档,很简单】
  • 启动容器,加载,运行服务提供者
  • 服务提供者在启动时,在注册中心发布注册自己提供的服务
  • 服务消费者在启动时,在注册中心订阅自己所需的服务
  • 服务消费者把服务当做本地调用就可以了。dubbo会自动注入。
具体操作Demo
服务端-Provider
配置:
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-dubbo</artifactId>
		</dependency>
######################## dubbo config : ########################
# 微服务治理控制台(Dubbo): https://edas.console.aliyun.com/#/dubboManage/SPServiceSearchConfig
# dubbo 服务扫描基础包路径
dubbo.scan.base-packages= com.example.demo.dubbo.provider    
# Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.name= dubbo
dubbo.protocol.port= -1
# 挂载到 Spring Cloud 注册中心
dubbo.registry.address= nacos://192.168.1.180:8848
# 用于服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 "," 分割。 不推荐使用默认值为 "*",它将订阅所有应用。
# 这里默认使用了当前应用名,请根据需要增加对应的应用名
#dubbo.cloud.subscribed-services= ${provider.application.name}
dubbo.cloud.subscribed-services= *
定义接口

这个接口的定义,在消费的时候也会用到,所有我估计着项目使用的话,这一部分需要作为公共包引入,或者使用自己的meaven仓库才行。

public interface UserService {
    String test(String message);
}
接口实现
package com.example.demo.dubbo.provider;
// 这个@Service 就是dubbo会扫描并注册发布的服务注解了 !!!!!
@Service
public class UserServiceImpl implements UserService {
    @Override
    public String test(String message) {
        return "this is provider service's information:"+message;
    }
}

然后? 就没有了 。。。。。

消费方-Consumer
配置:

跟服务端一样的,略过。只是消费的话可以不配置扫描包路径的。

引入服务接口包:重点

这个就是我之前一直想不通,为什么消费项目上可以使用提供方的service类进行注入了。

把前一个项目Provider,点一下maven的install。然后就有了一个demo-0.0.1-SNAPSHOT.jar 这么个的包。

加到项目的lib引用里面去,然后就可以了。

服务调用:
// 就是这个UserService接口,是在服务Provier里面定义的接口,这里要用到才能注入的。
// 就是上面Provier项目的包demo-0.0.1-SNAPSHOT.jar里面的接口定义
import com.example.demo.dubbo.api.UserService;

@RestController
public class DubboTest {

    // 这个注解会自动注入dubbo远程的服务的  
    @Reference
    private UserService userService;    

    @RequestMapping("/getDubboTest")
    public String getXhUser() {
        // 这里的使用 ,就跟本地调用一样就可以了,没有差别!!!!!
        return userService.test("Consumer's Test!!");
    }

}

好的,操作结束了

测试一下

访问http://localhost:8081/getDubboTest 这是Consumer的项目的方法了。

返回内容:this is provider service’s information:Consumer’s Test!!

证明,调用成功了!!!!! 收工了!!!!!!


小结一下

主要还是Dubbo的使用,用起来还是很方便的,不管实现的话,只要配置好,当做本身项目的服务直接调用就好。

注入什么,都是配置好自动的了,不用管!

纠结的:

因为,消费Consumer需要使用到服务端Provider的接口定义类,所以项目需要应用Provider的包才行。这个比较麻烦!

所有的对外或者对内调用的接口,需要单独一个包进行管理。
实现与使用(远程调用) 都基于这个接口包即可!!


2020-04-15 小杭 (⊙o⊙)… 学不动了啊。。。。。。。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`spring-cloud-alibaba-dependencies`是一个Maven BOM(Bill of Materials),包含了Spring Cloud Alibaba的所有依赖版本。通过引入`spring-cloud-alibaba-dependencies`,可以简化Spring Cloud Alibaba项目的依赖管理。它提供了以下依赖: - `spring-cloud-alibaba-dependencies`:Spring Cloud Alibaba版本管理器 - `spring-cloud-starter-alibaba-nacos-discovery`:Nacos服务发现 - `spring-cloud-starter-alibaba-nacos-config`:Nacos配置中心 - `spring-cloud-starter-alibaba-sentinel`:Sentinel限流熔断 - `spring-cloud-starter-alibaba-seata`:Seata分布式事务 - `spring-cloud-starter-alibaba-rocketmq`:RocketMQ消息队列 - `spring-cloud-starter-alibaba-dubbo`:Dubbo远程调用 使用`spring-cloud-alibaba-dependencies`需要在`pom.xml`文件中引入如下配置: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` 引入该依赖后,其他Spring Cloud Alibaba组件的依赖版本就可以省略了。例如,使用Nacos作为服务发现和配置中心,只需要引入以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` Spring Cloud Alibaba会自动使用`spring-cloud-alibaba-dependencies`中定义的版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_杭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值