Spring Boot 微服务调用

在微服务架构中,我们将系统拆分为很多个服务,各个服务之间通过注册与订阅的方式相互依赖,服务之间的通讯可以用Feign Client 或者用Apache CXF 通过URL调用远程WebService 进行调度(都是基于Restful风格,通讯机制很多种)

Apache CXF
方式一:apache-cxf-3.1.12,直接用url调用远程webService

消费者调用提供者

代码参考满足不了,自己编写封装方法或者不清楚留言给我。思路都是相同的。知道怎么调就可以了,我这里演示资讯服务调用用户服务过程。

1.重点内容
Spring Cloud 是在Spring Boot 的基础上快速构建分布式系统的工具集

基本使用Spring Boot 框架特性:
1.依赖 2.加注解 3.改配置

微服务特性:
1. 每个微服务可独立运行在自己的进程里;
2. 一系列独立运行的微服务共同构建起了整个系统;
3. 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理、用户管理等;
4. 微服务之间通过一些轻量的通信机制进行通信,例如通过REST API或者RPC的方式进行调用。

微服务优点:
1. 易于开发和维护
2. 启动较快
3. 局部修改容易部署
4. 技术栈不受限
5. 按需伸缩
6. DevOps
微服务带来的挑战:
1. 运维要求较高
2. 分布式的复杂性
3. 接口调整成本高
4. 重复劳动

微服务开发框架浅谈:
Spring Cloud:http://projects.spring.io/spring-cloud
Dubbo:http://dubbo.io
Dropwizard:http://www.dropwizard.io
Consl、etcd &etc.

这里不写eureka(尤里卡)以及注册中心问题。只写了解和远程调用。下面进入正题:

服务 CXF :
1.(消费者)编写NewsRemoteConfig类,写入注解注入到remote.properties中,定义调用提供者定义的方法和地址。

@ConfigurationProperties(prefix = “news”)
@PropertySource(“classpath:/remote.properties”)
@Component
public class NewsRemoteConfig {

public String news_user_url;
public String admininfo_method;`

    public String getNews_user_url() {
    return news_user_url;
}

public void setNews_user_url(String news_user_url) {
    this.news_user_url = news_user_url;
}
public String getAdmininfo_method() {
    return admininfo_method;
}

public void setAdmininfo_method(String admininfo_method) {
    this.admininfo_method = admininfo_method;
}

#调用 user 9900
remote.properties配置文件中(地址如果在本地测试需要加端口):

news.news_user_url=http://192.168.2.230/user/remote/remoteUserService?wsdl
news.admininfo_method=getAdminInfo

2.Service层创建NewsConsumer类,加入注解定义NewsRemoteConfig类,创建调用连接方法JaxwsRemoteCommand。

NewsConsumer类的封装方法:
Spring Boot 微服务调用_第1张图片

JaxwsRemoteCommand类的封装方法:
Spring Boot 微服务调用_第2张图片

3.NewsServiceImpl 业务调用,太简单这里就不说了。
String userStr = (String) newsConsumer.getAdminUserInfo(pubUserIds)[0];

4.提供者
1.编写sql语句(这里通过调用传过来的参数可以进行sql操作的条件)

2.Service接口代码:
package com.ceii.user.remote;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(targetNamespace = “http://user/cxf”)
public interface RemoteUserService {
String getAdminInfo(String userIds);

3、接口实现代码,返回数据(这里我的是JSON,大家可以根据自己需求)
Spring Boot 微服务调用_第3张图片



Feign Client

方式二:(Feign微服务调度) 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解是一个声明式的 Web Service 客户端。它的出现使开发 Web Service 客户端变得很简单。使用 Feign 只需要创建一个接口加上对应的注解

下面模拟一下ES服务调用Redis服务,用lettuce写入缓存。

1.先加入依赖

    
        org.springframework.cloud
        spring-cloud-starter-openfeign
    

2.Aplication启动类加入注解:

//开启 Feign 扫描支持 @EnableFeignClients

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

3.接口编写(加入Hystrix熔断机制)

  • 消费者调用提供者
    Spring Boot 微服务调用_第4张图片
    @FeignClient (configuration 配置,这里测试就不加了)
    Spring Boot 微服务调用_第5张图片

Hystrix 处理(可以完善)
Spring Boot 微服务调用_第6张图片
Redis 服务主意加上@RestController 大概就是这样 没什么要说的,服务路径要一致。
Spring Boot 微服务调用_第7张图片

ES Controller 编写测试调用。

Spring Boot 微服务调用_第8张图片
启动服务:
Spring Boot 微服务调用_第9张图片
调用:
Spring Boot 微服务调用_第10张图片
已经看到控制台输出打印的成功!下面查看Redis
Spring Boot 微服务调用_第11张图片
Redis 接口验证

Spring Boot 微服务调用_第12张图片

5.通过完成,是不是很简单!

你可能感兴趣的:(Spring,Boot)