### GroupCo-java
### 特性
- 支持内部服务调用
- 支持GroupCo的客户端调用
- 支持redis注册中心、服务的发现与注册
- 客户端缓存
- 服务优雅停机
- 故障切换(todo)
### 服务提供方
#### 定义服务接口
DemoService.java
```java
package co.demo.server;
import co.server.annotation.Param;
public interface DemoService {
String sayHello(@Param("name") String name);
}
```
#### 在服务提供方实现接口
DemoServiceImpl
```java
package co.demo.server;
import co.server.annotation.Param;
import org.springframework.stereotype.Service;
@Service("demoService")
public class DemoServiceImpl implements DemoService {
public String sayHello(@Param("name") String name) {
return "Hello " + name;
}
}
```
#### 用 Spring 配置声明暴露服务
app.xml
```xml
<?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:context="http://www.springframework.org/schema/context"
xmlns:redisson="http://redisson.org/schema/redisson"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd">
<context:component-scan base-package="co.demo.server"/>
<context:component-scan base-package="co.server"/>
<bean id="ApplicationContextUtil" class="co.server.context.ApplicationContextUtil"></bean>
<bean id="groupCoServer" class="co.server.CoServer">
<property name="serviceName" value="Demo"/>
<property name="port" value="8099"/>
<!--公开的服务-->
<property name="services">
<map>
<entry key="demoService">
<map>
<entry key="interface" value="co.demo.server.DemoService"/>
</map>
</entry>
</map>
</property>
</bean>
<!--以redis作为注册中心-->
<redisson:client id="coRedissonClient" codec-ref="codec">
<redisson:single-server address="redis://127.0.0.1:6379"/>
</redisson:client>
<bean id="codec" class="org.redisson.client.codec.StringCodec"/>
<bean id="redisKeyUtil"
class="co.server.common.util.RedisKeyUtil">
<property name="prefix" value="demo"></property>
</bean>
</beans>
```
#### 加载 Spring 配置
ServiceProvider.java
```java
import co.server.CoServer;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ServiceProvider {
public static void main(String[] args) throws Exception {
System.out.println("service starting...");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:app.xml");
context.start();
}
}
```
### 服务消费者
#### 通过 Spring 配置引用远程服务
```xml
<?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:context="http://www.springframework.org/schema/context"
xmlns:redisson="http://redisson.org/schema/redisson"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd">
<context:component-scan base-package="co.server"/>
<bean id="ApplicationContextUtil" class="co.server.context.ApplicationContextUtil"></bean>
<bean id="groupCoServer" class="co.server.CoServer">
<property name="serviceName" value="DemoClient"/>
<property name="port" value="8098"/>
<!--依赖的服务-->
<property name="references">
<map>
<entry key="demoService">
<map>
<entry key="serverName" value="Demo"></entry>
<entry key="interface" value="co.demo.server.DemoService"/>
</map>
</entry>
</map>
</property>
</bean>
<redisson:client id="coRedissonClient" codec-ref="codec">
<redisson:single-server address="redis://127.0.0.1:6379"/>
</redisson:client>
<bean id="codec" class="org.redisson.client.codec.StringCodec"/>
<bean id="redisKeyUtil"
class="co.server.common.util.RedisKeyUtil">
<property name="prefix" value="demo"></property>
</bean>
</beans>
```
#### 加载Spring配置,并调用远程服务
Consumer.java
```java
import co.demo.server.DemoService;
import co.server.CoServer;
import co.server.Services;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:app.xml");
context.start();
DemoService demoService = Services.getBean("demoService");
String hello = demoService.sayHello("world"); // 执行远程方法
System.out.println( hello ); // 显示调用结果
}
}
```
### PHP调用
#### 使用Group-Co框架的Tcp客户端调用
##### 注意设置config/app.php中
```php
'protocol' => 'buf',
//包体的打包方式json,serialize
'pack' => 'json',
//是否启用gzip压缩true,false
'gzip' => false,
```
##### 使用service_center()服务中心调用
```php
$service = (yield service_center('Demo'));
$res = (yield $service->call("Demo::sayHello", ['name' => world]));
dump($res);
```
##### 使用异步TCP客户端调用
```php
$tcp = new AsyncTcp('127.0.0.1', 8099);
$res = (yield $tcp->call(['cmd' => 'Demo\\Demo::sayHello', 'data' => ['name' => 'world']]));
//it will return
//{"cmd":"Demo\\Demo::sayHello","code":200,"data":"Hello world","type":"json","version":"1.0.0"}
```
#### 使用swoole客户端调用
```php
<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->set(array(
'open_length_check' => true,
'package_length_type' => 'N',
'package_max_length' => 2000000,
'package_length_offset' => 0,
'package_body_offset' => 4,
));
$client->on("connect", function($cli) {
$cmd = "Demo\\Demo::sayHello";
$data = array('name' => 'world');
$bin_body = pack("a*", json_encode(['cmd' => $cmd, 'data' => $data]));
$body_len = strlen($bin_body);
$bin_head = pack("N", $body_len);
$bin_data = $bin_head . $bin_body;
$cli->send($bin_data);
});
$client->on("receive", function($cli, $data){
$data = substr($data, 4);
echo "Received: ".$data."\n";
});
$client->on("error", function($cli){
echo "Connect failed\n";
});
$client->on("close", function($cli){
echo "Connection close\n";
});
$client->connect('127.0.0.1', 8099, 0.5);
```
没有合适的资源?快使用搜索试试~ 我知道了~
GroupCo基础服务提供者.java版本.可以与GroupCo服务层无缝切换.rar
共109个文件
java:59个
xml:17个
properties:14个
需积分: 5 0 下载量 24 浏览量
2023-06-25
15:33:24
上传
评论
收藏 185KB RAR 举报
温馨提示
JavaGroups—构建分布式通信的基础(上) JavaGroups 是一种可靠组通信工具,在同一个台主机、局域网甚至是广域网中,组成员可以加入一个组,发送消息给其它的组成员并从其它成员中接收消息,系统跟踪所有组成员加入、退出和崩溃,并将这些系统信息发送给其它组成员。在JavaGroups中,组并不需要明确地创建,当第一个成员加入一个组时,自动创建了该组,第一个成员同时作为系统的协调者统一发送系统信息(譬如成员的加入退出等)给其它成员,而其他组成员通过与系统协调者的通信来获得系统的变化情况。目前大部分开源的分布式缓存的底层都是基于JGroups,包括鼎鼎大名的JBossCache、OSCache等等。 ayufox,20060717122217.gif 上图为JavaGroups的概念架构图。可以看出,JavaGroups从概念上自下而上分为三个部分,协议栈、通道(Channel接口)、 BuildingBlocks And DistributedDataStructures (高层组件和分布式数据结构)和应用程序。
资源推荐
资源详情
资源评论
收起资源包目录
GroupCo基础服务提供者.java版本.可以与GroupCo服务层无缝切换.rar (109个子文件)
gradlew.bat 2KB
.gitignore 94B
build.gradle 1KB
settings.gradle 1KB
build.gradle 360B
build.gradle 335B
build.gradle 328B
build.gradle 287B
build.gradle 284B
build.gradle 284B
build.gradle 270B
build.gradle 240B
build.gradle 240B
build.gradle 240B
build.gradle 206B
build.gradle 206B
gradlew 5KB
NioServer.java 8KB
CoServerHandler.java 5KB
CoServer.java 4KB
Services.java 4KB
Server.java 4KB
CoFuture.java 4KB
RedisRegistryProcesser.java 3KB
Client.java 3KB
ObjectEchoClient.java 3KB
CompactObjectInputStream.java 3KB
ShopServiceImpl.java 2KB
ProxyFactory.java 2KB
ObjectEchoClientHandler.java 2KB
ShopEntity.java 2KB
SocketUtil.java 2KB
SocketUtil.java 2KB
CompactObjectOutputStream.java 2KB
MsgDecoder.java 2KB
MsgEncoder.java 2KB
ApplicationContextUtil.java 1KB
UserServiceImpl.java 1KB
ObjectEncoder.java 1KB
Response.java 1KB
ShutdownHook.java 1017B
MethodReflectUtil.java 923B
MethodReflectUtil.java 913B
ObjectClientHandler.java 878B
ShopService.java 833B
CoChannel.java 828B
Request.java 766B
UserEntity.java 683B
ShopRepository.java 670B
Consumer.java 593B
RegistryProcesser.java 590B
StaticCache.java 543B
ServiceProvider.java 539B
ServiceProvider.java 539B
ApplicationContextListener.java 530B
Context.java 502B
Context.java 496B
RpcServer.java 434B
UserRepository.java 434B
UserServiceImpl.java 409B
RedisKeyUtil.java 401B
ServiceProvider.java 386B
Response.java 360B
UserService.java 357B
Data.java 347B
ResponseFuture.java 334B
ShutdownHandler.java 289B
DemoServiceImpl.java 282B
Constants.java 276B
Param.java 200B
Param.java 195B
NioReactorThread.java 185B
DemoService.java 143B
ResponseCallback.java 141B
UserService.java 100B
RedisHeartbeatProcesser.java 69B
README.md 7KB
c+++历史进程.pdf 214KB
log4j.properties 967B
log4j.properties 967B
log4j.properties 966B
log4j.properties 966B
log4j.properties 966B
log4j.properties 966B
log4j.properties 966B
log4j.properties 966B
application.properties 259B
application.properties 259B
application.properties 255B
application.properties 255B
gradle-wrapper.properties 235B
application.properties 89B
db.xml 4KB
db.xml 4KB
db.xml 4KB
db.xml 4KB
app.xml 2KB
app.xml 2KB
app.xml 2KB
app.xml 2KB
共 109 条
- 1
- 2
资源评论
野生的狒狒
- 粉丝: 3396
- 资源: 2436
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 连接ESP32手表来做验证20241223-140953.pcapng
- 小偏差线性化模型,航空发动机线性化,非线性系统线性化,求解线性系统具体参数,最小二乘拟合 MATLAB Simulink 航空发动机,非线性,线性,非线性系统,线性系统,最小二乘,拟合,小偏差,系统辨
- 好用的Linux终端管理工具,支持自定义多行脚本命令,密码保存、断链续接,SFTP等功能
- Qt源码ModbusTCP 主机客户端通信程序 基于QT5 QWidget, 实现ModbusTCP 主机客户端通信,支持以下功能: 1、支持断线重连 2、通过INI文件配置自定义服务器I
- Linux下TurboVNC+VirtualGL 使用GPU卡vglrun glxgears
- QGroundControl-installer.exe
- Linux下TurboVNC+VirtualGL 使用GPU卡vglrun glxgears
- 台球检测40-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 颜色拾取器 for Windows
- 数字按键3.2考试代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功