Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
4580fc5
update
kimmking Nov 4, 2020
a19fa69
udpate 0302
kimmking Nov 5, 2020
5762222
update 0302
kimmking Nov 5, 2020
e2097ab
update 0303
kimmking Nov 6, 2020
5080e60
add homework 0303
kimmking Nov 6, 2020
46835e7
add homework 0303
kimmking Nov 6, 2020
436102c
update 0303
kimmking Nov 7, 2020
524adb2
Create homework2.0.md
kimmking Nov 11, 2020
5f15b4a
Update homework2.0.md
kimmking Nov 11, 2020
b9bd39e
update spring01
kimmking Nov 12, 2020
8ed0787
Merge branch 'main' of https://github.com/kimmking/JavaCourseCodes in…
kimmking Nov 12, 2020
7e46a63
一二三周作业简单示例
renfufei Nov 12, 2020
60d2f74
第3周作业简单实现
renfufei Nov 12, 2020
deb84b8
update 4.1
kimmking Nov 12, 2020
4ec3317
Merge branch 'main' of https://github.com/kimmking/JavaCourseCodes in…
kimmking Nov 12, 2020
3e3e698
add spring boot
kimmking Nov 14, 2020
ae4a252
update
kimmking Nov 17, 2020
45d3bf2
update java8
kimmking Nov 19, 2020
49da3e2
remove target
kimmking Nov 19, 2020
6d921f5
update
kimmking Dec 7, 2020
3a852c8
add rpc
kimmking Dec 12, 2020
d360a51
complete
kimmking Dec 12, 2020
714088e
update homeworks
kimmking Dec 12, 2020
ef939af
refactoring for fx and biz
kimmking Dec 12, 2020
7fc6668
update dubbo demo
kimmking Dec 12, 2020
02c958a
update
kimmking Dec 17, 2020
c163ed9
add zk
kimmking Dec 18, 2020
cde9d3a
update comment
kimmking Dec 18, 2020
6338a8f
add cache for mybatis
kimmking Dec 27, 2020
4768759
update
kimmking Dec 27, 2020
11a72bd
update
kimmking Dec 28, 2020
d5a8f4a
add sql
kimmking Dec 28, 2020
badd48d
update
kimmking Dec 28, 2020
8e18480
update 23
kimmking Dec 30, 2020
014efe3
update redission
kimmking Dec 30, 2020
45e80a8
update
kimmking Dec 30, 2020
24aff72
udpate
kimmking Dec 30, 2020
bb818e2
update
kimmking Dec 30, 2020
25a4ab5
update
kimmking Jan 7, 2021
d9d3590
update
kimmking Jan 7, 2021
8c2e70a
update
kimmking Jan 9, 2021
6da62e9
update
kimmking Jan 9, 2021
e78e6c1
udpate
kimmking Jan 9, 2021
8c88059
add mq 01
kimmking Jan 10, 2021
9562ea0
add README
kimmking Jan 10, 2021
72edf3a
udpate
kimmking Jan 10, 2021
5ccaac9
add mq demo
kimmking Jan 14, 2021
a279778
update
kimmking Jan 14, 2021
9a30cc5
add rocketmq demo
kimmking Jan 14, 2021
dbd14b1
add netty demo
kimmking Jan 17, 2021
6058224
add router for gateway
kimmking Jan 20, 2021
3809b42
update backend
kimmking Jan 20, 2021
b63161e
update
kimmking Jan 20, 2021
4f4ed28
update
kimmking Jan 20, 2021
ee52288
add response filter
kimmking Jan 20, 2021
bf86c46
update TestAddUrl
kimmking Jan 21, 2021
b01f882
update
kimmking Jan 24, 2021
502df42
update
kimmking Jan 24, 2021
2cd9ac8
udpate childOption
kimmking Jan 24, 2021
f3f6632
update
kimmking Jan 24, 2021
68af61f
update
kimmking Jan 28, 2021
01903e4
update
kimmking Feb 3, 2021
fa2aa23
add BeanPostProcessor
kimmking Feb 3, 2021
b26bd71
update
kimmking Feb 10, 2021
8eefc19
update homework2.0
kimmking Feb 17, 2021
36f9176
update homework2.0
kimmking Feb 17, 2021
672a304
update homework2.0
kimmking Feb 17, 2021
0d2545f
第1周-作业1(选做)
renfufei Apr 24, 2021
53e84fc
第一周 - 作业3(必做)
renfufei Apr 25, 2021
0b8b5ca
第一周 - 作业4.(选做)
renfufei Apr 25, 2021
57f0b79
第一周-作业5.(选做)
renfufei Apr 25, 2021
a2e6c0c
GCLogAnalysis
renfufei Apr 25, 2021
4837b4e
更多资料
renfufei Apr 27, 2021
5339cb7
第二周-作业6.(必做)
renfufei May 16, 2021
155f2b5
Week02 作业
renfufei May 16, 2021
201be61
update
kimmking Jun 21, 2021
ec84c8d
fix -Xms512 to -Xms512m
loodeer Jun 22, 2021
dccd797
Merge pull request #17 from loodeer/patch-1
kimmking Jun 25, 2021
6943786
部分: 第7周作业-第8周作业
renfufei Sep 19, 2021
21f061f
第七周-作业2- 部分
renfufei Sep 22, 2021
99903cc
add fastdfs
kimmking Mar 5, 2022
9a9fec6
Merge branch 'gmain' into main
kimmking Mar 6, 2022
b424f7f
add fastdfs
kimmking Mar 5, 2022
7017134
add dtx01
kimmking Mar 23, 2022
8b854ed
Merge branch 'main' into gmain
kimmking Mar 23, 2022
ad0fa06
move
renfufei Apr 3, 2022
95dcfbb
Create 作业注意事项.md
renfufei Sep 8, 2022
647cc63
add some test codes
kimmking Oct 2, 2022
4f8c3c6
add some test codes
kimmking Oct 2, 2022
be5d0d2
update rpc02 and add spring04
kimmking Oct 21, 2022
b0f2bc7
Merge branch 'main' into gmain
kimmking Oct 21, 2022
ccd1eb5
valiate jdbc generated keys when insert into on duplicate key update …
kimmking Oct 21, 2022
588dc3f
polish jvm demo
kimmking Oct 29, 2022
e05c096
add xlass
kimmking Oct 29, 2022
aebe322
update
kimmking Oct 29, 2022
2ea655a
add hello method
kimmking Oct 30, 2022
9e7c762
add comments
kimmking Oct 30, 2022
962bd12
add JOL demo
kimmking Oct 30, 2022
45cf133
update
kimmking Nov 18, 2022
a378db1
add multiple beans registrar
kimmking Nov 29, 2022
e84d39f
add registrar
kimmking Dec 23, 2022
6ebd3b2
complete registy for zk
kimmking Jan 1, 2024
c6a07a3
remove some sout
kimmking Jan 1, 2024
8d5ea10
remove some sout
kimmking Jan 1, 2024
8afa0eb
remove some sout
kimmking Jan 1, 2024
42fe0c8
add connectionPool
kimmking Jan 12, 2024
04090c9
refactor RPC and Registry
kimmking Jan 13, 2024
c7c24d0
compelet kk registry integration
kimmking Apr 14, 2024
beddc69
update some config
kimmking Apr 14, 2024
ef42a2b
polish codes
kimmking Apr 15, 2024
9f00f9e
add file store
kimmking Jun 25, 2024
58bb7d3
update ignore
kimmking Jun 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor RPC and Registry
  • Loading branch information
kimmking committed Jan 13, 2024
commit 04090c923fa5c67b8596e621042580cb0b736e6b
1 change: 1 addition & 0 deletions 07rpc/rpc01/client-rest.http
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://127.0.0.1:8080/api/hello
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Target(ElementType.FIELD)
@Inherited
public @interface RpcfxReference {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.kimmking.rpcfx.api;

import io.kimmking.rpcfx.meta.ProviderMeta;
import lombok.Getter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

import java.util.HashMap;
import java.util.Map;

/**
* Description for this class.
*
* @Author : kimmking(kimmking@apache.org)
* @create 2024/1/13 20:34
*/
public class RpcContext {

@Getter
private MultiValueMap<String, ProviderMeta> providerHolder = new LinkedMultiValueMap<>();

@Getter
private Map<String, Object> consumerHolder = new HashMap<>();

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package io.kimmking.rpcfx.consumer;

import io.kimmking.rpcfx.annotation.RpcfxReference;
import io.kimmking.rpcfx.api.RpcContext;
import io.kimmking.rpcfx.stub.StubSkeletonHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValues;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;
import org.springframework.stereotype.Component;

import java.io.Closeable;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
* Description for this class.
*
* @Author : kimmking(kimmking@apache.org)
* @create 2024/1/13 23:26
*/
@Slf4j
@Component
public class ConsumerBootstrap implements Closeable, InstantiationAwareBeanPostProcessor {

private RpcContext rpcContext = new RpcContext();

private String scanPackage = "io.kimmking";

@Override
public void close() throws IOException {

}

@Override
public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) throws BeansException {
if (bean.getClass().getPackage().getName().startsWith(scanPackage)) {
Field[] declaredFields = bean.getClass().getDeclaredFields();
List<Field> consumers = Arrays.stream(declaredFields).filter(field -> field.isAnnotationPresent(RpcfxReference.class)).collect(Collectors.toList());

consumers.stream().forEach(consumer -> {
Object consumer1 = createConsumer(consumer.getType());
try {
consumer.setAccessible(true);
consumer.set(bean, consumer1);
} catch (IllegalAccessException e) {
log.error(e.getMessage(), e);
}
});
}
return null;
}

private <T> T createConsumer(Class<T> clazz) {
return StubSkeletonHelper.createConsumer(clazz, rpcContext);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package io.kimmking.rpcfx.client;
package io.kimmking.rpcfx.consumer;

import com.alibaba.fastjson.JSON;
import io.kimmking.rpcfx.api.*;
import io.kimmking.rpcfx.stub.StubSkeletonHelper;
import okhttp3.*;

import java.io.IOException;
Expand Down Expand Up @@ -35,6 +36,10 @@ public <T> RpcfxInvocationHandler(Class<T> serviceClass, List<String> invokers,
@Override
public Object invoke(Object proxy, Method method, Object[] params) throws Throwable {

if (!StubSkeletonHelper.checkRpcMethod(method)){
return null ;
}

List<String> urls = router.route(invokers);
// System.out.println("router.route => ");
// urls.forEach(System.out::println);
Expand Down Expand Up @@ -85,9 +90,6 @@ private RpcfxResponse post(RpcfxRequest req, String url) throws IOException {
String reqJson = JSON.toJSONString(req);
// System.out.println("req json: "+reqJson);

// 1.可以复用client
// 2.尝试使用httpclient或者netty client

final Request request = new Request.Builder()
.url(url)
.post(RequestBody.create(JSONTYPE, reqJson))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,54 +1,50 @@
package io.kimmking.rpcfx.client;
package io.kimmking.rpcfx.consumer;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import io.kimmking.rpcfx.api.*;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;

import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;

public final class Rpcfx {
public final class RpcfxInvoker {

static {
ParserConfig.getGlobalInstance().addAccept("io.kimmking");
}
CuratorFramework client;
String zkUrl = null;

public static <T, filters> T createFromRegistry(final Class<T> serviceClass, final String zkUrl, Router router, LoadBalancer loadBalance, Filter filter) {
public RpcfxInvoker(String zkUrl) {
this.zkUrl = zkUrl; //"localhost:2181"
this.start();
}

public void start() {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
client = CuratorFrameworkFactory.builder().connectString(this.zkUrl).namespace("rpcfx").retryPolicy(retryPolicy).build();
client.start();
}

public void stop() {
client.close();
}

// 加filte之一
public <T> T createFromRegistry(final Class<T> serviceClass, Router router, LoadBalancer loadBalance, Filter filter) {

String service = serviceClass.getCanonicalName();//"io.kimking.rpcfx.demo.api.UserService";
System.out.println("====> "+service);
List<String> invokers = new ArrayList<>();

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client = CuratorFrameworkFactory.builder().connectString("localhost:2181").namespace("rpcfx").retryPolicy(retryPolicy).build();
client.start();

try {
// ServiceProviderDesc userServiceSesc = ServiceProviderDesc.builder()
// .host(InetAddress.getLocalHost().getHostAddress())
// .port(8082).serviceClass(service).build();
// String userServiceSescJson = JSON.toJSONString(userServiceSesc);


if ( null == client.checkExists().forPath("/" + service)) {
return null;
Expand All @@ -69,25 +65,13 @@ public void childEvent(CuratorFramework curatorFramework, TreeCacheEvent treeCac
ex.printStackTrace();
}

//
//
// // register service
// // xxx "io.kimmking.rpcfx.demo.api.UserService"
//


// curator Provider list from zk

// 1. 简单:从zk拿到服务提供的列表
// 2. 挑战:监听zk的临时节点,根据事件更新这个list(注意,需要做个全局map保持每个服务的提供者List)

return (T) create(serviceClass, invokers, router, loadBalance, filter);

}



private static void fetchInvokers(CuratorFramework client, String service, List<String> invokers) throws Exception {
private void fetchInvokers(CuratorFramework client, String service, List<String> invokers) throws Exception {
List<String> services = client.getChildren().forPath("/" + service);
invokers.clear();
for (String svc : services) {
Expand All @@ -97,10 +81,11 @@ private static void fetchInvokers(CuratorFramework client, String service, List<
}
}

private static <T> Object create(Class<T> serviceClass, List<String> invokers, Router router, LoadBalancer loadBalance, Filter... filters) {
// 0. 替换动态代理 -> 字节码生成
return (T) Proxy.newProxyInstance(Rpcfx.class.getClassLoader(), new Class[]{serviceClass},
new RpcfxInvocationHandler(serviceClass, invokers, router, loadBalance, filters));
private <T> T create(Class<T> serviceClass, List<String> invokers, Router router, LoadBalancer loadBalance, Filter... filters) {
RpcfxInvocationHandler invocationHandler
= new RpcfxInvocationHandler(serviceClass, invokers, router, loadBalance, filters);
return (T) Proxy.newProxyInstance(RpcfxInvoker.class.getClassLoader(),
new Class[]{serviceClass}, invocationHandler);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.kimmking.rpcfx.discovery;

/**
* Description for this class.
*
* @Author : kimmking(kimmking@apache.org)
* @create 2024/1/13 20:17
*/
public class DiscoveryClient {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.kimmking.rpcfx.meta;

import lombok.Data;

import java.lang.reflect.Method;

/**
* @author lirui
*/
@Data
public class ProviderMeta {

private Object serviceImpl;

private Method method;

private String methodSign;

}
Loading