分布式(基础)-WebService(四)

简介: 分布式(基础)-WebService(四)

WebService-xfire

xfire是3到5年的存活期,然后就淡出了市场。

1、引入相关的依赖:引入all的话,它会把所有关于xfire相关的东西都加载进来。

  1. <dependency>
  2.      <groupId>org.codehaus.xfire</groupId>
  3.      <artifactId>xfire-all</artifactId>
  4.      <version>1.2.6</version>
  5.    </dependency>

引进来之后会把默认的spring1.2.6的版本给引入进来。

所以将spring1.2.6的版本给排除掉,而xfire最高支持spring的版本是3.2的。超过的话就会报错:

  1.     <!--引入spring-->
  2.    <dependency>
  3.      <groupId>org.springframework</groupId>
  4.      <artifactId>spring-web</artifactId>
  5.      <version>3.2.12.RELEASE</version>
  6.    </dependency>
  7.  <dependency>
  8.      <groupId>org.codehaus.xfire</groupId>
  9.      <artifactId>xfire-all</artifactId>
  10.      <version>${xfire-version}</version>
  11.      <exclusions>
  12.        <exclusion>
  13.           <groupId>org.springframework</groupId>
  14.           <artifactId>spring</artifactId>
  15.        </exclusion>
  16.      </exclusions>
  17.    </dependency>

2、新建一个接口和对应的实现类如下:

  1. package com.xf.demo.service;

  2. import com.xf.demo.domain.User;

  3. import java.util.List;

  4. public interface UserService {
  5.    void addUser(User user);
  6.    void delUser(Integer id);
  7.    User getUserById(Integer id);
  8.    List<User> getUsers();
  9. }
  10. package com.xf.demo.service;

  11. import com.xf.demo.domain.User;
  12. import org.springframework.stereotype.Service;

  13. import java.util.ArrayList;
  14. import java.util.List;
  15. //下面的接口中的方法是要暴漏出来的接口,然后通过接口找到对应的实现类,然后去实现远程的调用
  16. @Service("userService")
  17. public class UserServiceImpl implements  UserService {
  18.    @Override
  19.    public void addUser(User user) {
  20.        System.out.println("新增的用户为"+user);
  21.    }

  22.    @Override
  23.    public void delUser(Integer id) {
  24.        System.out.println("删除了"+id+"用户信息");
  25.    }

  26.    @Override
  27.    public User getUserById(Integer id) {
  28.        User user = new User();
  29.        user.setId(id);

  30.        user.setName("魏朝阳");
  31.        user.setPass("123");
  32.        return null;
  33.    }
  34.    @Override
  35.    public List<User> getUsers() {
  36.        List<User> userList=new ArrayList<>();
  37.        userList.add(new User(1234567,"李四","234"));
  38.        userList.add(new User(1234568,"王五","235"));
  39.        userList.add(new User(1234569,"赵六","236"));
  40.        return userList;
  41.    }
  42. }

2.1、写一个xml文件用来spring和xfire整合的:把这个导入进去,就是把整个xfire和spring整合的需要的对象就都交给Spring容器去管理。

在xfire.xml文件中导入了自定义的编辑器:

注册为单例的。

传输管理器,用的是默认的传输管理对象。

里面会定义一个默认的xfire的文件,当发布服务的时候必须有xfire的对象存在。因为这个对象是靠构造函数来注入的。是靠参数(的索引来注入的。

就是把刚刚的两个对象注入到xfire对象里面去。

数据格式提供绑定器:所以说在配置的时候要指定哪种数据格式来进行访问。

消息绑定的提供器:就是序列化和反序列化的提供器

消息在网络中进行传输肯定是需要序列化和反序列化将数据在网络中传输

2.2、配置哪些服务被发布:发布的接口是哪一个,发布的接口的实现类是哪一个。

2.3、配置web.xml,告诉哪些请求交给WebService去做处理,去配置xfire的控制器:

2.4、把该项目发布出去:

2.5、访问下xfire对应的wsdl文件:

2.6、这就成功的生成了wsdl的文件:

这样的一个WebService的服务就发布成功了,每一个元素都有一些约束。

name有in和out。in0代表传入的第一个参数。类型为整型。

getUserByIdResponse就是getUserById的响应结果,响应结果就是out

返回的类型是User对象。

它也把User的实体类映射一个xml,而且也保证了参数的顺序的。

当去调用的话,是需要下面的访问地址去调用 :这是一个服务终端的请求接口。

写一个主函数,然后运行启动:

WebService的Xfire就是这么做的。

在不同的项目中是如何去调用的呢?

3、新建一个客户端的项目,

3.1、加入相应的依赖,这里加的依赖与server端的依赖是一样的,这里就不贴了。

3.2、把server端的接口和实体类拷贝到client端,代码如下:

  1. package com.xf.demo.domain;

  2. public class User {
  3.    private Integer id;
  4.    private String name;
  5.    private String pass;

  6.    public User() {
  7.    }

  8.    public User(Integer id, String name, String pass) {
  9.        this.id = id;
  10.        this.name = name;
  11.        this.pass = pass;
  12.    }

  13.    public Integer getId() {
  14.        return id;
  15.    }

  16.    public void setId(Integer id) {
  17.        this.id = id;
  18.    }

  19.    public String getName() {
  20.        return name;
  21.    }

  22.    public void setName(String name) {
  23.        this.name = name;
  24.    }

  25.    public String getPass() {
  26.        return pass;
  27.    }

  28.    public void setPass(String pass) {
  29.        this.pass = pass;
  30.    }

  31.    @Override
  32.    public String toString() {
  33.        return "User{" +
  34.                "id=" + id +
  35.                ", name='" + name + '\'' +
  36.                ", pass='" + pass + '\'' +
  37.                '}';
  38.    }
  39. }
  40. package com.xf.demo.service;

  41. import com.xf.demo.domain.User;

  42. import java.util.List;

  43. public interface UserService {
  44.    void addUser(User user);
  45.    void delUser(Integer id);
  46.    User getUserById(Integer id);
  47.    List<User> getUsers();
  48. }

客户端的代码如下:

然后启动客户端:当客户端添加成功之后,就在server端的控制台就有对应的输出语句:

革命尚未成功,继续努力!!!!

相关文章
|
3月前
|
XML Java 数据格式
分布式(基础)-WebService(二)
分布式(基础)-WebService(二)
|
3月前
|
XML Java Apache
分布式(基础)-WebService(三)
分布式(基础)-WebService(三)
|
3月前
|
XML JSON Java
分布式(基础)-WebService(五)
分布式(基础)-WebService(五)
|
3月前
|
XML JSON 网络协议
分布式(基础)-WebService(一)
分布式(基础)-WebService(一)
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
4月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
116 2
基于Redis的高可用分布式锁——RedLock
|
4月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
19天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
53 16
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
64 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁