Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
caopu16
whatsmars
提交
1b95dbc9
W
whatsmars
项目概览
caopu16
/
whatsmars
与 Fork 源项目一致
Fork自
武汉红喜 / whatsmars
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
whatsmars
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
1b95dbc9
编写于
12月 04, 2017
作者:
武汉红喜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update package name
上级
c73ad059
变更
64
隐藏空白更改
内联
并排
Showing
64 changed file
with
1304 addition
and
669 deletion
+1304
-669
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/BrokerStartup.java
.../java/com/itlong/whatsmars/mq/rocketmq/BrokerStartup.java
+0
-14
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/NamesrvStartup.java
...java/com/itlong/whatsmars/mq/rocketmq/NamesrvStartup.java
+0
-13
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/ordermessage/Producer.java
...m/itlong/whatsmars/mq/rocketmq/ordermessage/Producer.java
+0
-45
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/quickstart/Producer.java
...com/itlong/whatsmars/mq/rocketmq/quickstart/Producer.java
+0
-82
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/zeromq/Publisher.java
...c/main/java/com/itlong/whatsmars/mq/zeromq/Publisher.java
+0
-21
whatsmars-mq/src/main/java/com/whatsmars/mq/activemq/Consumer.java
...-mq/src/main/java/com/whatsmars/mq/activemq/Consumer.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/activemq/Producer.java
...-mq/src/main/java/com/whatsmars/mq/activemq/Producer.java
+26
-0
whatsmars-mq/src/main/java/com/whatsmars/mq/kafka/KafkaProducer.java
...q/src/main/java/com/whatsmars/mq/kafka/KafkaProducer.java
+30
-0
whatsmars-mq/src/main/java/com/whatsmars/mq/rabbitmq/Consumer.java
...-mq/src/main/java/com/whatsmars/mq/rabbitmq/Consumer.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/_BrokerStartup.java
...c/main/java/com/whatsmars/mq/rocketmq/_BrokerStartup.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/broadcast/PushConsumer.java
...ava/com/whatsmars/mq/rocketmq/broadcast/PushConsumer.java
+13
-10
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/quickstart/Consumer.java
...n/java/com/whatsmars/mq/rocketmq/quickstart/Consumer.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/CachedQueue.java
...in/java/com/whatsmars/mq/rocketmq/simple/CachedQueue.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/PullConsumer.java
...n/java/com/whatsmars/mq/rocketmq/simple/PullConsumer.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/PullScheduleService.java
...com/whatsmars/mq/rocketmq/simple/PullScheduleService.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/RandomAsyncCommit.java
...a/com/whatsmars/mq/rocketmq/simple/RandomAsyncCommit.java
+1
-1
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/TestProducer.java
...n/java/com/whatsmars/mq/rocketmq/simple/TestProducer.java
+20
-26
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/transaction/TransactionExecuterImpl.java
...mars/mq/rocketmq/transaction/TransactionExecuterImpl.java
+8
-9
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/transaction/TransactionProducer.java
...hatsmars/mq/rocketmq/transaction/TransactionProducer.java
+1
-3
whatsmars-mq/src/main/java/com/whatsmars/mq/zeromq/Subscriber.java
...-mq/src/main/java/com/whatsmars/mq/zeromq/Subscriber.java
+1
-1
whatsmars-redis/src/main/java/com/whatsmars/redis/client/cluster/RedisClusterClient.java
...om/whatsmars/redis/client/cluster/RedisClusterClient.java
+114
-0
whatsmars-redis/src/main/java/com/whatsmars/redis/client/readwrite/ReadWriteRedisClient.java
...hatsmars/redis/client/readwrite/ReadWriteRedisClient.java
+1
-1
whatsmars-redis/src/test/java/com/itlong/whatsmars/redis/client/Demo.java
...src/test/java/com/itlong/whatsmars/redis/client/Demo.java
+0
-75
whatsmars-rpc/src/main/java/com/itlong/whatsmars/rpc/protocol/grpc/client/HelloWorldClient.java
.../whatsmars/rpc/protocol/grpc/client/HelloWorldClient.java
+0
-44
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/grpc/server/HelloWorldServer.java
.../whatsmars/rpc/protocol/grpc/server/HelloWorldServer.java
+4
-4
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/Demo.java
...c/src/main/java/com/whatsmars/rpc/protocol/http/Demo.java
+2
-2
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/HttpMessage.java
...ain/java/com/whatsmars/rpc/protocol/http/HttpMessage.java
+1
-1
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/HttpRequestDecoder.java
...a/com/whatsmars/rpc/protocol/http/HttpRequestDecoder.java
+109
-0
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/HttpResponseMessage.java
.../com/whatsmars/rpc/protocol/http/HttpResponseMessage.java
+79
-0
whatsmars-rpc/src/main/proto/helloworld.proto
whatsmars-rpc/src/main/proto/helloworld.proto
+1
-1
whatsmars-spring/src/main/java/com/itlong/whatsmars/spring/context/TestSpring.java
.../java/com/itlong/whatsmars/spring/context/TestSpring.java
+0
-17
whatsmars-spring/src/main/java/com/whatsmars/spring/aspect/SystemLogAspect.java
...ain/java/com/whatsmars/spring/aspect/SystemLogAspect.java
+103
-0
whatsmars-spring/src/main/java/com/whatsmars/spring/context/annotation/AppConfig.java
...va/com/whatsmars/spring/context/annotation/AppConfig.java
+2
-2
whatsmars-spring/src/main/java/com/whatsmars/spring/context/generic/TestSpring.java
...java/com/whatsmars/spring/context/generic/TestSpring.java
+2
-2
whatsmars-spring/src/main/java/com/whatsmars/spring/model/Mars.java
...spring/src/main/java/com/whatsmars/spring/model/Mars.java
+1
-1
whatsmars-spring/src/main/resources/applicationContext.xml
whatsmars-spring/src/main/resources/applicationContext.xml
+2
-2
whatsmars-spring/src/test/java/com/whatsmars/spring/XxDemo.java
...ars-spring/src/test/java/com/whatsmars/spring/XxDemo.java
+23
-0
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/connector/HttpResponse.java
...a/com/itlong/whatsmars/tomcat/connector/HttpResponse.java
+0
-188
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/design/adapter/Adaptee.java
...a/com/itlong/whatsmars/tomcat/design/adapter/Adaptee.java
+0
-11
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/design/decorator/HtmlFilter.java
.../itlong/whatsmars/tomcat/design/decorator/HtmlFilter.java
+0
-16
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/design/decorator/Test.java
...va/com/itlong/whatsmars/tomcat/design/decorator/Test.java
+0
-17
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/embed/servlet/HelloServlet.java
...m/itlong/whatsmars/tomcat/embed/servlet/HelloServlet.java
+0
-27
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/servlet/StaticResourceProcessor.java
...ong/whatsmars/tomcat/servlet/StaticResourceProcessor.java
+0
-17
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/Bootstrap.java
...c/main/java/com/whatsmars/tomcat/connector/Bootstrap.java
+15
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpConnector.java
...in/java/com/whatsmars/tomcat/connector/HttpConnector.java
+67
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpHeader.java
.../main/java/com/whatsmars/tomcat/connector/HttpHeader.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpProcessor.java
...in/java/com/whatsmars/tomcat/connector/HttpProcessor.java
+134
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpRequestLine.java
.../java/com/whatsmars/tomcat/connector/HttpRequestLine.java
+54
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/SocketInputStream.java
...ava/com/whatsmars/tomcat/connector/SocketInputStream.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/adapter/Adapter.java
...ain/java/com/whatsmars/tomcat/design/adapter/Adapter.java
+13
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/adapter/Adapter2.java
...in/java/com/whatsmars/tomcat/design/adapter/Adapter2.java
+11
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/decorator/MessageBoard.java
...a/com/whatsmars/tomcat/design/decorator/MessageBoard.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/decorator/MessageBoardDecorator.java
...tsmars/tomcat/design/decorator/MessageBoardDecorator.java
+16
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/decorator/SensitiveFilter.java
...om/whatsmars/tomcat/design/decorator/SensitiveFilter.java
+16
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/embed/Main.java
...tomcat/src/main/java/com/whatsmars/tomcat/embed/Main.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/server/HttpServer.java
...src/main/java/com/whatsmars/tomcat/server/HttpServer.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/server/Request.java
...at/src/main/java/com/whatsmars/tomcat/server/Request.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/HttpServer.java
...rc/main/java/com/whatsmars/tomcat/servlet/HttpServer.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/PrimitiveServlet.java
...n/java/com/whatsmars/tomcat/servlet/PrimitiveServlet.java
+33
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/Request.java
...t/src/main/java/com/whatsmars/tomcat/servlet/Request.java
+209
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/RequestFacade.java
...main/java/com/whatsmars/tomcat/servlet/RequestFacade.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/Response.java
.../src/main/java/com/whatsmars/tomcat/servlet/Response.java
+124
-0
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/ResponseFacade.java
...ain/java/com/whatsmars/tomcat/servlet/ResponseFacade.java
+1
-1
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/ServletProcessor.java
...n/java/com/whatsmars/tomcat/servlet/ServletProcessor.java
+52
-0
未找到文件。
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/BrokerStartup.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.mq.rocketmq
;
/**
* Created by shenhongxi on 2017/6/21.
*/
public
class
BrokerStartup
{
public
static
void
main
(
String
[]
args
)
{
String
classpath
=
BrokerStartup
.
class
.
getResource
(
"/"
).
getPath
();
args
=
new
String
[]
{
"-c"
,
classpath
+
"broker.properties"
};
org
.
apache
.
rocketmq
.
broker
.
BrokerStartup
.
main
(
args
);
System
.
out
.
println
(
"Broker started. name: "
+
org
.
apache
.
rocketmq
.
broker
.
BrokerStartup
.
properties
.
getProperty
(
"brokerName"
));
}
}
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/NamesrvStartup.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.mq.rocketmq
;
/**
* Created by shenhongxi on 2017/6/21.
*/
public
class
NamesrvStartup
{
public
static
void
main
(
String
[]
args
)
{
String
classpath
=
BrokerStartup
.
class
.
getResource
(
"/"
).
getPath
();
args
=
new
String
[]
{
"-c"
,
classpath
+
"namesrv.properties"
};
org
.
apache
.
rocketmq
.
namesrv
.
NamesrvStartup
.
main
(
args
);
}
}
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/ordermessage/Producer.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.mq.rocketmq.ordermessage
;
import
org.apache.rocketmq.client.producer.DefaultMQProducer
;
import
org.apache.rocketmq.client.producer.MessageQueueSelector
;
import
org.apache.rocketmq.client.producer.SendResult
;
import
org.apache.rocketmq.common.message.Message
;
import
org.apache.rocketmq.common.message.MessageQueue
;
import
org.apache.rocketmq.remoting.common.RemotingHelper
;
import
java.io.UnsupportedEncodingException
;
import
java.util.List
;
public
class
Producer
{
public
static
void
main
(
String
[]
args
)
throws
UnsupportedEncodingException
{
try
{
DefaultMQProducer
producer
=
new
DefaultMQProducer
(
"order_message_producer_group"
);
producer
.
setNamesrvAddr
(
"127.0.0.1:9876"
);
producer
.
start
();
// defaultTopicQueueNums = 4
String
[]
tags
=
new
String
[]
{
"TagA"
,
"TagB"
,
"TagC"
,
"TagD"
,
"TagE"
};
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
int
orderId
=
i
%
10
;
Message
msg
=
new
Message
(
"TopicTest"
,
tags
[
i
%
tags
.
length
],
"KEY"
+
i
,
(
"Hello RocketMQ "
+
i
).
getBytes
(
RemotingHelper
.
DEFAULT_CHARSET
));
// 需要顺序消费的消息发往同一队列,比如同一订单号相关的几条需要顺序消费的消息发往同一队列
SendResult
sendResult
=
producer
.
send
(
msg
,
new
MessageQueueSelector
()
{
@Override
public
MessageQueue
select
(
List
<
MessageQueue
>
mqs
,
Message
msg
,
Object
arg
)
{
Integer
id
=
(
Integer
)
arg
;
int
index
=
id
%
mqs
.
size
();
return
mqs
.
get
(
index
);
}
},
orderId
);
System
.
out
.
printf
(
"%s%n"
,
sendResult
);
}
producer
.
shutdown
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/rocketmq/quickstart/Producer.java
已删除
100644 → 0
浏览文件 @
c73ad059
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.itlong.whatsmars.mq.rocketmq.quickstart
;
import
org.apache.rocketmq.client.exception.MQClientException
;
import
org.apache.rocketmq.client.producer.DefaultMQProducer
;
import
org.apache.rocketmq.client.producer.SendResult
;
import
org.apache.rocketmq.common.message.Message
;
import
org.apache.rocketmq.remoting.common.RemotingHelper
;
/**
* This class demonstrates how to send messages to brokers using provided {@link DefaultMQProducer}.
*/
public
class
Producer
{
public
static
void
main
(
String
[]
args
)
throws
MQClientException
,
InterruptedException
{
/*
* Instantiate with a producer group name.
*/
DefaultMQProducer
producer
=
new
DefaultMQProducer
(
"quick_start_producer_group"
);
/*
* Specify name server addresses.
* <p/>
*
* Alternatively, you may specify name server addresses via exporting environmental variable: NAMESRV_ADDR
* <pre>
* {@code
* producer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876");
* }
* </pre>
*/
producer
.
setNamesrvAddr
(
"127.0.0.1:9876"
);
/*
* Launch the instance.
*/
producer
.
start
();
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
try
{
/*
* Create a message instance, specifying topic, tag and message body.
*/
Message
msg
=
new
Message
(
"TopicTest"
/* Topic */
,
"TagA"
/* Tag */
,
(
"Hello RocketMQ "
+
i
).
getBytes
(
RemotingHelper
.
DEFAULT_CHARSET
)
/* Message body */
);
/*
* Call send message to deliver message to one of brokers.
*/
SendResult
sendResult
=
producer
.
send
(
msg
);
System
.
out
.
printf
(
"%s%n"
,
sendResult
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
Thread
.
sleep
(
1000
);
}
}
/*
* Shut down once the producer instance is not longer in use.
*/
producer
.
shutdown
();
}
}
whatsmars-mq/src/main/java/com/itlong/whatsmars/mq/zeromq/Publisher.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.mq.zeromq
;
import
org.zeromq.ZMQ
;
public
class
Publisher
{
public
static
void
main
(
String
args
[])
{
ZMQ
.
Context
context
=
ZMQ
.
context
(
1
);
// 创建包含一个I/O线程的context
ZMQ
.
Socket
publisher
=
context
.
socket
(
ZMQ
.
PUB
);
publisher
.
bind
(
"tcp://*:5555"
);
while
(!
Thread
.
currentThread
().
isInterrupted
())
{
String
message
=
"toutiao hello"
;
publisher
.
send
(
message
.
getBytes
());
System
.
out
.
println
(
"sent : "
+
message
);
}
publisher
.
close
();
context
.
term
();
}
}
\ No newline at end of file
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/activemq/Consumer.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/activemq/Consumer.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.mq.activemq
;
package
com.whatsmars.mq.activemq
;
import
org.apache.activemq.ActiveMQConnectionFactory
;
...
...
whatsmars-mq/src/main/java/com/whatsmars/mq/activemq/Producer.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.mq.activemq
;
import
org.apache.activemq.ActiveMQConnectionFactory
;
import
javax.jms.*
;
/**
* Created by shenhongxi on 2017/9/8.
*/
public
class
Producer
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
ActiveMQConnectionFactory
factory
=
new
ActiveMQConnectionFactory
(
"tcp://127.0.0.1:61616"
);
Connection
connection
=
factory
.
createConnection
();
Session
session
=
connection
.
createSession
(
false
,
Session
.
AUTO_ACKNOWLEDGE
);
Queue
queue
=
session
.
createQueue
(
"TEST.QUEUE"
);
MessageProducer
producer
=
session
.
createProducer
(
queue
);
producer
.
setDeliveryMode
(
DeliveryMode
.
PERSISTENT
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
TextMessage
message
=
session
.
createTextMessage
(
"hello world! "
+
i
);
producer
.
send
(
message
);
System
.
out
.
println
(
message
);
}
producer
.
close
();
}
}
whatsmars-mq/src/main/java/com/whatsmars/mq/kafka/KafkaProducer.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.mq.kafka
;
import
kafka.javaapi.producer.Producer
;
import
kafka.producer.KeyedMessage
;
import
kafka.producer.ProducerConfig
;
import
java.util.Properties
;
public
class
KafkaProducer
{
public
static
void
main
(
String
[]
args
)
{
Properties
props
=
new
Properties
();
props
.
put
(
"metadata.broker.list"
,
"127.0.0.1:9092"
);
props
.
put
(
"serializer.class"
,
"kafka.serializer.StringEncoder"
);
props
.
put
(
"key.serializer.class"
,
"kafka.serializer.StringEncoder"
);
props
.
put
(
"request.required.acks"
,
"-1"
);
Producer
<
String
,
String
>
producer
=
new
Producer
<
String
,
String
>(
new
ProducerConfig
(
props
));
int
messageNo
=
100
;
final
int
COUNT
=
1000
;
while
(
messageNo
<
COUNT
)
{
String
key
=
String
.
valueOf
(
messageNo
);
String
data
=
"hello kafka message "
+
key
;
producer
.
send
(
new
KeyedMessage
<
String
,
String
>(
"TestTopic"
,
key
,
data
));
System
.
out
.
println
(
data
);
messageNo
++;
}
}
}
\ No newline at end of file
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rabbitmq/Consumer.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rabbitmq/Consumer.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.mq.rabbitmq
;
package
com.whatsmars.mq.rabbitmq
;
import
com.rabbitmq.client.Channel
;
import
com.rabbitmq.client.Connection
;
...
...
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rocketmq/_BrokerStartup.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/_BrokerStartup.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.mq.rocketmq
;
package
com.whatsmars.mq.rocketmq
;
/**
* Created by shenhongxi on 2017/6/21.
...
...
whatsmars-mq/src/main/java/com/
itlong/whatsmars/mq/rocketmq/simple
/PushConsumer.java
→
whatsmars-mq/src/main/java/com/
whatsmars/mq/rocketmq/broadcast
/PushConsumer.java
浏览文件 @
1b95dbc9
...
...
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.
itlong.whatsmars.mq.rocketmq.simple
;
package
com.
whatsmars.mq.rocketmq.broadcast
;
import
org.apache.rocketmq.client.consumer.DefaultMQPushConsumer
;
import
org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext
;
...
...
@@ -23,30 +23,33 @@ import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import
org.apache.rocketmq.client.exception.MQClientException
;
import
org.apache.rocketmq.common.consumer.ConsumeFromWhere
;
import
org.apache.rocketmq.common.message.MessageExt
;
import
org.apache.rocketmq.common.protocol.heartbeat.MessageModel
;
import
java.util.List
;
public
class
PushConsumer
{
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
,
MQClientException
{
DefaultMQPushConsumer
consumer
=
new
DefaultMQPushConsumer
(
"
push
_consumer_group"
);
DefaultMQPushConsumer
consumer
=
new
DefaultMQPushConsumer
(
"
broadcast
_consumer_group"
);
consumer
.
setNamesrvAddr
(
"127.0.0.1:9876"
);
consumer
.
subscribe
(
"TopicTest"
,
"*"
);
consumer
.
setConsumeFromWhere
(
ConsumeFromWhere
.
CONSUME_FROM_FIRST_OFFSET
);
//wrong time format 2017_0422_221800
consumer
.
setConsumeTimestamp
(
"20170422221800"
);
consumer
.
registerMessageListener
(
new
MessageListenerConcurrently
()
{
/**
consumer
.
setMessageModel
(
MessageModel
.
BROADCASTING
);
consumer
.
subscribe
(
"TopicTest"
,
"TagA || TagC || TagD"
);
consumer
.
registerMessageListener
(
new
MessageListenerConcurrently
()
{
*/
@Override
public
ConsumeConcurrentlyStatus
consumeMessage
(
List
<
MessageExt
>
msgs
,
ConsumeConcurrentlyContext
context
)
{
public
ConsumeConcurrentlyStatus
consumeMessage
(
List
<
MessageExt
>
msgs
,
ConsumeConcurrentlyContext
context
)
{
System
.
out
.
printf
(
Thread
.
currentThread
().
getName
()
+
" Receive New Messages: "
+
msgs
+
"%n"
);
return
ConsumeConcurrentlyStatus
.
CONSUME_SUCCESS
;
}
});
consumer
.
start
();
System
.
out
.
printf
(
"Consumer Started.%n"
);
System
.
out
.
printf
(
"
Broadcast
Consumer Started.%n"
);
}
}
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rocketmq/quickstart/Consumer.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/quickstart/Consumer.java
浏览文件 @
1b95dbc9
...
...
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.quickstart
;
package
com.whatsmars.mq.rocketmq.quickstart
;
import
org.apache.rocketmq.client.consumer.DefaultMQPushConsumer
;
import
org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext
;
...
...
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rocketmq/simple/CachedQueue.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/CachedQueue.java
浏览文件 @
1b95dbc9
...
...
@@ -15,7 +15,7 @@
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.simple
;
package
com.whatsmars.mq.rocketmq.simple
;
import
org.apache.rocketmq.common.message.MessageExt
;
...
...
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rocketmq/simple/PullConsumer.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/PullConsumer.java
浏览文件 @
1b95dbc9
...
...
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.simple
;
package
com.whatsmars.mq.rocketmq.simple
;
import
org.apache.rocketmq.client.consumer.DefaultMQPullConsumer
;
import
org.apache.rocketmq.client.consumer.PullResult
;
...
...
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rocketmq/simple/PullScheduleService.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/PullScheduleService.java
浏览文件 @
1b95dbc9
...
...
@@ -15,7 +15,7 @@
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.simple
;
package
com.whatsmars.mq.rocketmq.simple
;
import
org.apache.rocketmq.client.consumer.*
;
import
org.apache.rocketmq.client.exception.MQClientException
;
...
...
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rocketmq/simple/RandomAsyncCommit.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/simple/RandomAsyncCommit.java
浏览文件 @
1b95dbc9
...
...
@@ -15,7 +15,7 @@
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.simple
;
package
com.whatsmars.mq.rocketmq.simple
;
import
org.apache.rocketmq.common.message.MessageExt
;
import
org.apache.rocketmq.common.message.MessageQueue
;
...
...
whatsmars-mq/src/main/java/com/
itlong/whatsmars/mq/rocketmq/simple/Async
Producer.java
→
whatsmars-mq/src/main/java/com/
whatsmars/mq/rocketmq/simple/Test
Producer.java
浏览文件 @
1b95dbc9
...
...
@@ -14,48 +14,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.simple
;
package
com.whatsmars.mq.rocketmq.simple
;
import
org.apache.rocketmq.client.QueryResult
;
import
org.apache.rocketmq.client.exception.MQClientException
;
import
org.apache.rocketmq.client.producer.DefaultMQProducer
;
import
org.apache.rocketmq.client.producer.SendCallback
;
import
org.apache.rocketmq.client.producer.SendResult
;
import
org.apache.rocketmq.common.message.Message
;
import
org.apache.rocketmq.common.message.MessageExt
;
import
org.apache.rocketmq.remoting.common.RemotingHelper
;
import
java.io.UnsupportedEncodingException
;
public
class
AsyncProducer
{
public
static
void
main
(
String
[]
args
)
throws
MQClientException
,
InterruptedException
,
UnsupportedEncodingException
{
DefaultMQProducer
producer
=
new
DefaultMQProducer
(
"async_producer_group"
);
public
class
TestProducer
{
public
static
void
main
(
String
[]
args
)
throws
MQClientException
,
InterruptedException
{
DefaultMQProducer
producer
=
new
DefaultMQProducer
(
"simple_producer_group"
);
producer
.
setNamesrvAddr
(
"127.0.0.1:9876"
);
producer
.
start
();
producer
.
setRetryTimesWhenSendAsyncFailed
(
0
);
for
(
int
i
=
0
;
i
<
1
00
;
i
++)
{
for
(
int
i
=
0
;
i
<
1
;
i
++)
try
{
final
int
index
=
i
;
Message
msg
=
new
Message
(
"TopicTest"
,
"TagA"
,
"OrderID188"
,
"Hello world"
.
getBytes
(
RemotingHelper
.
DEFAULT_CHARSET
));
producer
.
send
(
msg
,
new
SendCallback
()
{
@Override
public
void
onSuccess
(
SendResult
sendResult
)
{
System
.
out
.
printf
(
"%-10d OK %s %n"
,
index
,
sendResult
.
getMsgId
());
}
{
Message
msg
=
new
Message
(
"TopicTest"
,
"TagA"
,
"key113"
,
"Hello world"
.
getBytes
(
RemotingHelper
.
DEFAULT_CHARSET
));
SendResult
sendResult
=
producer
.
send
(
msg
);
System
.
out
.
printf
(
"%s%n"
,
sendResult
);
@Override
public
void
onException
(
Throwable
e
)
{
System
.
out
.
printf
(
"%-10d Exception %s %n"
,
index
,
e
);
e
.
printStackTrace
(
);
QueryResult
queryMessage
=
producer
.
queryMessage
(
"TopicTest"
,
"key113"
,
10
,
0
,
System
.
currentTimeMillis
());
for
(
MessageExt
m
:
queryMessage
.
getMessageList
())
{
System
.
out
.
printf
(
"%s%n"
,
m
);
}
});
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
producer
.
shutdown
();
}
}
whatsmars-mq/src/main/java/com/
itlong/whatsmars/mq/rocketmq/transaction/TransactionCheckListen
erImpl.java
→
whatsmars-mq/src/main/java/com/
whatsmars/mq/rocketmq/transaction/TransactionExecut
erImpl.java
浏览文件 @
1b95dbc9
...
...
@@ -14,23 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.transaction
;
package
com.whatsmars.mq.rocketmq.transaction
;
import
org.apache.rocketmq.client.producer.LocalTransactionExecuter
;
import
org.apache.rocketmq.client.producer.LocalTransactionState
;
import
org.apache.rocketmq.client.producer.TransactionCheckListener
;
import
org.apache.rocketmq.common.message.MessageExt
;
import
org.apache.rocketmq.common.message.Message
;
import
java.util.concurrent.atomic.AtomicInteger
;
public
class
Transaction
CheckListenerImpl
implements
TransactionCheckListen
er
{
private
AtomicInteger
transactionIndex
=
new
AtomicInteger
(
0
);
public
class
Transaction
ExecuterImpl
implements
LocalTransactionExecut
er
{
private
AtomicInteger
transactionIndex
=
new
AtomicInteger
(
1
);
@Override
public
LocalTransactionState
checkLocalTransactionState
(
MessageExt
msg
)
{
System
.
out
.
printf
(
"server checking TrMsg "
+
msg
.
toString
()
+
"%n"
);
public
LocalTransactionState
executeLocalTransactionBranch
(
final
Message
msg
,
final
Object
arg
)
{
int
value
=
transactionIndex
.
getAndIncrement
();
if
((
value
%
6
)
==
0
)
{
if
(
value
==
0
)
{
throw
new
RuntimeException
(
"Could not find db"
);
}
else
if
((
value
%
5
)
==
0
)
{
return
LocalTransactionState
.
ROLLBACK_MESSAGE
;
...
...
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/rocketmq/transaction/TransactionProducer.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/rocketmq/transaction/TransactionProducer.java
浏览文件 @
1b95dbc9
...
...
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.
itlong.
whatsmars.mq.rocketmq.transaction
;
package
com.whatsmars.mq.rocketmq.transaction
;
import
org.apache.rocketmq.client.exception.MQClientException
;
import
org.apache.rocketmq.client.producer.TransactionCheckListener
;
...
...
@@ -23,8 +23,6 @@ import org.apache.rocketmq.client.producer.TransactionSendResult;
import
org.apache.rocketmq.common.message.Message
;
import
org.apache.rocketmq.remoting.common.RemotingHelper
;
import
java.io.UnsupportedEncodingException
;
public
class
TransactionProducer
{
public
static
void
main
(
String
[]
args
)
throws
MQClientException
,
InterruptedException
{
TransactionCheckListener
transactionCheckListener
=
new
TransactionCheckListenerImpl
();
...
...
whatsmars-mq/src/main/java/com/
itlong/
whatsmars/mq/zeromq/Subscriber.java
→
whatsmars-mq/src/main/java/com/whatsmars/mq/zeromq/Subscriber.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.mq.zeromq
;
package
com.whatsmars.mq.zeromq
;
import
org.zeromq.ZMQ
;
...
...
whatsmars-redis/src/main/java/com/whatsmars/redis/client/cluster/RedisClusterClient.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.redis.client.cluster
;
import
org.springframework.beans.factory.FactoryBean
;
import
org.springframework.beans.factory.InitializingBean
;
import
redis.clients.jedis.HostAndPort
;
import
redis.clients.jedis.JedisCluster
;
import
redis.clients.jedis.JedisPoolConfig
;
import
java.util.HashSet
;
import
java.util.Set
;
/**
* Created by javahongxi on 2017/6/22.
*/
public
class
RedisClusterClient
implements
FactoryBean
<
JedisCluster
>,
InitializingBean
{
private
JedisCluster
jedisCluster
;
private
int
maxTotal
=
128
;
//最大空闲连接数
private
int
maxIdle
=
6
;
//最小空闲连接数
private
int
minIdle
=
1
;
//如果连接池耗尽,最大阻塞的时间,默认为3秒
private
long
maxWait
=
3000
;
//单位毫秒
private
int
timeout
=
3000
;
//connectionTimeout,soTimeout,默认为3秒
private
boolean
testOnBorrow
=
true
;
private
boolean
testOnReturn
=
true
;
private
String
addresses
;
//ip:port,ip:port
public
void
setMaxTotal
(
int
maxTotal
)
{
this
.
maxTotal
=
maxTotal
;
}
public
void
setMaxIdle
(
int
maxIdle
)
{
this
.
maxIdle
=
maxIdle
;
}
public
void
setMinIdle
(
int
minIdle
)
{
this
.
minIdle
=
minIdle
;
}
public
void
setMaxWait
(
long
maxWait
)
{
this
.
maxWait
=
maxWait
;
}
public
void
setTimeout
(
int
timeout
)
{
this
.
timeout
=
timeout
;
}
public
void
setTestOnBorrow
(
boolean
testOnBorrow
)
{
this
.
testOnBorrow
=
testOnBorrow
;
}
public
void
setTestOnReturn
(
boolean
testOnReturn
)
{
this
.
testOnReturn
=
testOnReturn
;
}
public
void
setAddresses
(
String
addresses
)
{
this
.
addresses
=
addresses
;
}
protected
JedisPoolConfig
buildConfig
()
{
JedisPoolConfig
config
=
new
JedisPoolConfig
();
config
.
setMinIdle
(
minIdle
);
config
.
setMaxIdle
(
maxIdle
);
config
.
setMaxTotal
(
maxTotal
);
config
.
setTestOnBorrow
(
testOnBorrow
);
config
.
setTestOnReturn
(
testOnReturn
);
config
.
setBlockWhenExhausted
(
true
);
config
.
setMaxWaitMillis
(
maxWait
);
config
.
setFairness
(
false
);
return
config
;
}
private
Set
<
HostAndPort
>
buildHostAndPorts
()
{
String
[]
hostPorts
=
addresses
.
split
(
","
);
Set
<
HostAndPort
>
hostAndPorts
=
new
HashSet
<
HostAndPort
>();
for
(
String
item
:
hostPorts
)
{
String
[]
hostPort
=
item
.
split
(
":"
);
HostAndPort
hostAndPort
=
new
HostAndPort
(
hostPort
[
0
],
Integer
.
valueOf
(
hostPort
[
1
]));
hostAndPorts
.
add
(
hostAndPort
);
}
return
hostAndPorts
;
}
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
JedisPoolConfig
config
=
buildConfig
();
Set
<
HostAndPort
>
hostAndPorts
=
buildHostAndPorts
();
jedisCluster
=
new
JedisCluster
(
hostAndPorts
,
timeout
,
config
);
}
@Override
public
JedisCluster
getObject
()
throws
Exception
{
return
jedisCluster
;
}
@Override
public
Class
<?>
getObjectType
()
{
return
JedisCluster
.
class
;
}
@Override
public
boolean
isSingleton
()
{
return
true
;
}
}
whatsmars-redis/src/main/java/com/
itlong/
whatsmars/redis/client/readwrite/ReadWriteRedisClient.java
→
whatsmars-redis/src/main/java/com/whatsmars/redis/client/readwrite/ReadWriteRedisClient.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.redis.client.readwrite
;
package
com.whatsmars.redis.client.readwrite
;
import
org.springframework.beans.factory.InitializingBean
;
import
redis.clients.jedis.Jedis
;
...
...
whatsmars-redis/src/test/java/com/itlong/whatsmars/redis/client/Demo.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.redis.client
;
import
com.itlong.whatsmars.redis.client.readwrite.ReadWriteRedisClient
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
redis.clients.jedis.Jedis
;
import
redis.clients.jedis.JedisCluster
;
import
redis.clients.jedis.JedisPool
;
/**
* Created by javahongxi on 2017/6/23.
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
(
locations
=
"classpath:spring-redis.xml"
)
public
class
Demo
{
@Autowired
@Qualifier
(
"singletonRedisClient"
)
private
JedisPool
singletonRedisClient
;
@Autowired
private
ReadWriteRedisClient
readWriteRedisClient
;
@Autowired
@Qualifier
(
"redisClusterClient"
)
private
JedisCluster
jedisCluster
;
@Test
public
void
testSingleton
()
{
Jedis
jedis
=
singletonRedisClient
.
getResource
();
String
cacheContent
=
null
;
try
{
cacheContent
=
jedis
.
get
(
"hello_world"
);
}
finally
{
singletonRedisClient
.
close
();
}
// 获取redis数据之后,立即释放连接,然后开始进行业务处理
if
(
cacheContent
==
null
)
{
// DB operation
}
// ..
}
@Test
public
void
testReadWrite
()
{
String
cacheContent
=
null
;
try
{
readWriteRedisClient
.
set
(
"hello_world"
,
"Hi World!"
);
cacheContent
=
readWriteRedisClient
.
get
(
"hello_world"
);
System
.
out
.
println
(
cacheContent
);
}
catch
(
Exception
e
)
{
//如果异常,你可以决定是否忽略
}
if
(
cacheContent
==
null
)
{
//如果cache中不存在,或者redis异常
}
}
@Test
public
void
testCluster
()
{
String
cacheContent
=
null
;
try
{
cacheContent
=
jedisCluster
.
get
(
"hello_world"
);
}
catch
(
Exception
e
)
{
//如果异常,你可以决定是否忽略
}
if
(
cacheContent
==
null
)
{
//如果cache中不存在,或者redis异常
}
}
}
whatsmars-rpc/src/main/java/com/itlong/whatsmars/rpc/protocol/grpc/client/HelloWorldClient.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.rpc.protocol.grpc.client
;
import
io.grpc.ManagedChannel
;
import
io.grpc.ManagedChannelBuilder
;
import
com.itlong.whatsmars.grpc.service.HelloServiceGrpc
;
import
com.itlong.whatsmars.grpc.service.HelloRequest
;
import
com.itlong.whatsmars.grpc.service.HelloResponse
;
import
java.util.concurrent.TimeUnit
;
/**
* Created by shenhongxi on 2017/5/5.
*/
public
class
HelloWorldClient
{
private
final
ManagedChannel
channel
;
private
final
HelloServiceGrpc
.
HelloServiceBlockingStub
blockingStub
;
public
HelloWorldClient
(
String
host
,
int
port
){
channel
=
ManagedChannelBuilder
.
forAddress
(
host
,
port
)
.
usePlaintext
(
true
)
.
build
();
blockingStub
=
HelloServiceGrpc
.
newBlockingStub
(
channel
);
}
public
void
shutdown
()
throws
InterruptedException
{
channel
.
shutdown
().
awaitTermination
(
5
,
TimeUnit
.
SECONDS
);
}
public
void
greet
(
String
name
){
HelloRequest
request
=
HelloRequest
.
newBuilder
().
setName
(
name
).
build
();
HelloResponse
response
=
blockingStub
.
sayHello
(
request
);
System
.
out
.
println
(
response
.
getMessage
());
}
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
HelloWorldClient
client
=
new
HelloWorldClient
(
"127.0.0.1"
,
50051
);
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
client
.
greet
(
"world:"
+
i
);
}
client
.
shutdown
();
}
}
whatsmars-rpc/src/main/java/com/
itlong/
whatsmars/rpc/protocol/grpc/server/HelloWorldServer.java
→
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/grpc/server/HelloWorldServer.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.rpc.protocol.grpc.server
;
package
com.whatsmars.rpc.protocol.grpc.server
;
import
io.grpc.Server
;
import
io.grpc.ServerBuilder
;
import
io.grpc.stub.StreamObserver
;
import
com.
itlong.
whatsmars.grpc.service.HelloServiceGrpc
;
import
com.
itlong.
whatsmars.grpc.service.HelloRequest
;
import
com.
itlong.
whatsmars.grpc.service.HelloResponse
;
import
com.whatsmars.grpc.service.HelloServiceGrpc
;
import
com.whatsmars.grpc.service.HelloRequest
;
import
com.whatsmars.grpc.service.HelloResponse
;
import
java.io.IOException
;
...
...
whatsmars-rpc/src/main/java/com/
itlong/
whatsmars/rpc/protocol/http/Demo.java
→
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/Demo.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.rpc.protocol.http
;
package
com.whatsmars.rpc.protocol.http
;
import
com.
itlong.
whatsmars.grpc.service.HelloResponse
;
import
com.whatsmars.grpc.service.HelloResponse
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
...
...
whatsmars-rpc/src/main/java/com/
itlong/
whatsmars/rpc/protocol/http/HttpMessage.java
→
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/HttpMessage.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.rpc.protocol.http
;
package
com.whatsmars.rpc.protocol.http
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/HttpRequestDecoder.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.rpc.protocol.http
;
import
com.whatsmars.grpc.service.HelloRequest
;
import
org.apache.mina.core.buffer.IoBuffer
;
import
org.apache.mina.core.session.IoSession
;
import
org.apache.mina.filter.codec.CumulativeProtocolDecoder
;
import
org.apache.mina.filter.codec.ProtocolDecoderOutput
;
import
java.util.Arrays
;
/**
* Created by shenhongxi on 2017/6/14.
*/
public
class
HttpRequestDecoder
extends
CumulativeProtocolDecoder
{
@Override
protected
boolean
doDecode
(
IoSession
ioSession
,
IoBuffer
ioBuffer
,
ProtocolDecoderOutput
out
)
throws
Exception
{
int
start
=
ioBuffer
.
position
();
String
content
=
""
;
byte
[]
messages
=
null
;
try
{
//content = inBuffer.getString(Charset.forName("UTF-8").newDecoder());
messages
=
new
byte
[
ioBuffer
.
limit
()];
ioBuffer
.
get
(
messages
);
content
=
new
String
(
messages
,
"UTF-8"
);
}
catch
(
Exception
e
)
{
ioBuffer
.
position
(
start
);
return
false
;
}
int
position
=
content
.
indexOf
(
"\r\n\r\n"
);
if
(
position
==
-
1
)
{
ioBuffer
.
position
(
start
);
return
false
;
}
HttpRequestMessage
reqMsg
=
new
HttpRequestMessage
();
String
headerContent
=
content
.
substring
(
0
,
position
);
int
headerLength
=
position
+
4
;
String
[]
headers
=
headerContent
.
split
(
"\r\n"
);
for
(
String
header
:
headers
)
{
String
[]
temps
=
header
.
split
(
": "
);
if
(
temps
==
null
||
temps
.
length
<=
1
)
continue
;
reqMsg
.
addRequestHeader
(
temps
[
0
].
trim
().
toLowerCase
(),
temps
[
1
].
trim
());
}
int
fLPosition
=
headerContent
.
indexOf
(
"\r\n"
);
String
url
=
headerContent
.
substring
(
0
,
fLPosition
);
String
[]
urls
=
url
.
split
(
" "
);
if
(
urls
.
length
<
3
)
{
reqMsg
.
setErrorCode
(
400
);
out
.
write
(
reqMsg
);
return
true
;
}
if
(!
"GET"
.
equalsIgnoreCase
(
urls
[
0
])
&&
!
"POST"
.
equalsIgnoreCase
(
urls
[
0
]))
{
reqMsg
.
setErrorCode
(
400
);
out
.
write
(
reqMsg
);
return
true
;
}
reqMsg
.
setRequestProtocol
(
urls
[
0
]);
reqMsg
.
setRequestUrl
(
urls
[
1
]);
reqMsg
.
setVersion
(
urls
[
2
]);
String
bodyLengthStr
=
reqMsg
.
getRequestHeader
(
"Content-Length"
.
toLowerCase
());
if
(
bodyLengthStr
==
null
)
{
reqMsg
.
setErrorCode
(
400
);
out
.
write
(
reqMsg
);
return
true
;
}
int
bodyLength
=
-
1
;
try
{
bodyLength
=
Integer
.
parseInt
(
bodyLengthStr
.
trim
());
}
catch
(
Exception
e
)
{
reqMsg
.
setErrorCode
(
400
);
out
.
write
(
reqMsg
);
return
true
;
}
String
bodyContent
=
null
;
int
packageLength
=
bodyLength
+
headerLength
;
if
(
content
.
getBytes
(
"UTF-8"
).
length
>=
packageLength
)
{
ioBuffer
.
position
(
packageLength
);
int
l
=
messages
.
length
;
byte
[]
bodyBytes
=
Arrays
.
copyOfRange
(
messages
,
headerLength
,
packageLength
);
String
requestName
=
reqMsg
.
getRequestHeader
(
"Request-Name"
.
toLowerCase
());
if
(
requestName
!=
null
&&
!
requestName
.
equals
(
""
))
{
if
(
requestName
.
equals
(
"hello"
))
{
HelloRequest
helloRequest
=
HelloRequest
.
parseFrom
(
bodyBytes
);
}
}
else
{
bodyContent
=
new
String
(
bodyBytes
,
"UTF-8"
);
}
}
else
{
ioBuffer
.
position
(
start
);
return
false
;
}
reqMsg
.
setMessageBody
(
bodyContent
);
out
.
write
(
reqMsg
);
return
true
;
}
}
whatsmars-rpc/src/main/java/com/whatsmars/rpc/protocol/http/HttpResponseMessage.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.rpc.protocol.http
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Iterator
;
import
java.util.Map.Entry
;
public
class
HttpResponseMessage
extends
HttpMessage
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
HttpResponseMessage
.
class
);
private
int
statusCode
=
200
;
private
String
statusMessage
=
"OK"
;
public
HttpResponseMessage
()
{
this
.
messageHeader
.
put
(
"Content-Type"
,
"text/json; charset=UTF-8"
);
}
public
int
getStatusCode
()
{
return
this
.
statusCode
;
}
public
void
setStatusCode
(
int
statusCode
)
{
this
.
statusCode
=
statusCode
;
}
public
String
getStatusMessage
()
{
return
this
.
statusMessage
;
}
public
void
setStatusMessage
(
String
statusMessage
)
{
this
.
statusMessage
=
statusMessage
;
}
public
byte
[]
getByteBody
()
throws
UnsupportedEncodingException
{
if
(
this
.
messageBody
==
null
)
{
return
new
byte
[
0
];
}
return
this
.
messageBody
.
getBytes
(
"UTF-8"
);
}
public
int
getContentLength
()
throws
UnsupportedEncodingException
{
if
(
this
.
messageBody
==
null
)
{
return
0
;
}
return
this
.
messageBody
.
getBytes
(
"UTF-8"
).
length
;
}
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"\r\n\r\n"
);
sb
.
append
(
"\r\n"
);
sb
.
append
(
"HTTP/1.1"
).
append
(
" "
).
append
(
200
).
append
(
" "
).
append
(
this
.
statusMessage
).
append
(
"\r\n"
);
Iterator
iterator
=
this
.
messageHeader
.
entrySet
().
iterator
();
while
(
iterator
.
hasNext
())
{
Entry
entry
=
(
Entry
)
iterator
.
next
();
sb
.
append
((
String
)
entry
.
getKey
()).
append
(
": "
).
append
((
String
)
entry
.
getValue
()).
append
(
"\r\n"
);
}
try
{
sb
.
append
(
"Content-Length"
).
append
(
": "
).
append
(
String
.
valueOf
(
getContentLength
()));
}
catch
(
Exception
e
)
{
logger
.
error
(
"Encoding Error!"
,
e
);
}
sb
.
append
(
"\r\n\r\n"
);
sb
.
append
(
this
.
messageBody
);
sb
.
append
(
"\r\n\r\n"
);
return
sb
.
toString
();
}
}
whatsmars-rpc/src/main/proto/helloworld.proto
浏览文件 @
1b95dbc9
syntax
=
"proto3"
;
option
java_multiple_files
=
true
;
option
java_package
=
"com.
itlong.
whatsmars.grpc.service"
;
option
java_package
=
"com.whatsmars.grpc.service"
;
option
java_outer_classname
=
"HelloWorldProto"
;
option
objc_class_prefix
=
"HLW"
;
...
...
whatsmars-spring/src/main/java/com/itlong/whatsmars/spring/context/TestSpring.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.spring.context
;
import
com.itlong.whatsmars.spring.model.Mars
;
import
org.springframework.context.support.ClassPathXmlApplicationContext
;
/**
* Created by shenhongxi on 2016/4/7.
*/
public
class
TestSpring
{
public
static
void
main
(
String
[]
args
)
{
ClassPathXmlApplicationContext
context
=
new
ClassPathXmlApplicationContext
(
"applicationContext.xml"
);
Mars
mars
=
(
Mars
)
context
.
getBean
(
"mars"
);
System
.
out
.
println
(
mars
.
getAge
());
System
.
out
.
println
(
mars
.
getCnName
());
}
}
whatsmars-spring/src/main/java/com/whatsmars/spring/aspect/SystemLogAspect.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.spring.aspect
;
import
org.apache.log4j.Logger
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.annotation.After
;
import
org.aspectj.lang.annotation.AfterThrowing
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.lang.reflect.Method
;
@Aspect
@Component
public
class
SystemLogAspect
{
private
static
Logger
logger
=
Logger
.
getLogger
(
SystemLog
.
class
);
// Controller层切点
@Pointcut
(
"@annotation(com.qiku.log.annotation.SystemLog)"
)
public
void
controllerAspect
()
{
}
// 操作记录
@After
(
"controllerAspect()"
)
public
void
doAfter
(
JoinPoint
joinPoint
)
{
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
// 读取session中的用户
// User user = SessionUtils.getUserFromSession(request);
// if(null == user){
// logger.info("未登录日志不记录");
// return;
// }
try
{
Object
[]
args
=
getLogMethodDescription
(
joinPoint
);
// *========数据库日志=========*//
// logService.saveLog(user.getId(), user.getAccount(), Integer.valueOf(args[1].toString()),
// IpUtils.getIpAddr(request), args[0].toString(),
// user.getManufacturerId(), reqDescription(request));
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
e
.
printStackTrace
();
}
}
// 异常记录
@AfterThrowing
(
pointcut
=
"controllerAspect()"
,
throwing
=
"exception"
)
public
void
doException
(
JoinPoint
joinPoint
,
Exception
exception
)
{
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
// 读取session中的用户
// User user = SessionUtils.getUserFromSession(request);
// if(null == user){
// logger.info("未登录日志不记录");
// return;
// }
try
{
Object
[]
args
=
getLogMethodDescription
(
joinPoint
);
// *========数据库日志=========*//
// logService.saveLog(user.getId(), user.getAccount(), LogType.EXCEPTION_LOG,
// IpUtils.getIpAddr(request), args[0].toString() + "-->" + exception.getMessage(),
// user.getManufacturerId(), reqDescription(request));
}
catch
(
Exception
e
)
{
// 记录本地异常日志
logger
.
error
(
e
);
e
.
printStackTrace
();
}
}
/**
* 获取注解中对方法的描述信息 用于Controller层注解 切点
*/
@SuppressWarnings
(
"rawtypes"
)
public
static
Object
[]
getLogMethodDescription
(
JoinPoint
joinPoint
)
throws
Exception
{
String
targetName
=
joinPoint
.
getTarget
().
getClass
().
getName
();
String
methodName
=
joinPoint
.
getSignature
().
getName
();
Object
[]
arguments
=
joinPoint
.
getArgs
();
Class
<?>
targetClass
=
Class
.
forName
(
targetName
);
Method
[]
methods
=
targetClass
.
getMethods
();
Object
[]
result
=
new
Object
[
2
];
for
(
Method
method
:
methods
)
{
if
(
method
.
getName
().
equals
(
methodName
))
{
Class
[]
clazzs
=
method
.
getParameterTypes
();
if
(
clazzs
.
length
==
arguments
.
length
)
{
result
[
0
]
=
method
.
getAnnotation
(
SystemLog
.
class
).
description
();
result
[
1
]
=
method
.
getAnnotation
(
SystemLog
.
class
).
logType
();
break
;
}
}
}
return
result
;
}
}
whatsmars-spring/src/main/java/com/
itlong/
whatsmars/spring/context/annotation/AppConfig.java
→
whatsmars-spring/src/main/java/com/whatsmars/spring/context/annotation/AppConfig.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.spring.context.annotation
;
package
com.whatsmars.spring.context.annotation
;
import
com.
itlong.
whatsmars.spring.model.Mars
;
import
com.whatsmars.spring.model.Mars
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
...
...
whatsmars-spring/src/main/java/com/
itlong/
whatsmars/spring/context/generic/TestSpring.java
→
whatsmars-spring/src/main/java/com/whatsmars/spring/context/generic/TestSpring.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.spring.context.generic
;
package
com.whatsmars.spring.context.generic
;
import
com.
itlong.
whatsmars.spring.model.Mars
;
import
com.whatsmars.spring.model.Mars
;
import
org.springframework.beans.factory.support.PropertiesBeanDefinitionReader
;
import
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
;
import
org.springframework.context.support.GenericApplicationContext
;
...
...
whatsmars-spring/src/main/java/com/
itlong/
whatsmars/spring/model/Mars.java
→
whatsmars-spring/src/main/java/com/whatsmars/spring/model/Mars.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.spring.model
;
package
com.whatsmars.spring.model
;
/**
* Created by shenhongxi on 2016/4/7.
...
...
whatsmars-spring/src/main/resources/applicationContext.xml
浏览文件 @
1b95dbc9
...
...
@@ -8,9 +8,9 @@
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
default-autowire=
"byName"
>
<context:component-scan
base-package=
"com.
itlong.
whatsmars.spring.initializing"
/>
<context:component-scan
base-package=
"com.whatsmars.spring.initializing"
/>
<bean
id=
"mars"
class=
"com.
itlong.
whatsmars.spring.model.Mars"
>
<bean
id=
"mars"
class=
"com.whatsmars.spring.model.Mars"
>
<property
name=
"age"
value=
"45"
/>
<property
name=
"cnName"
value=
"火星"
/>
</bean>
...
...
whatsmars-spring/src/test/java/com/whatsmars/spring/XxDemo.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.spring
;
import
com.whatsmars.spring.model.Mars
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
/**
* Created by shenhongxi on 2016/7/5.
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
(
"/applicationContext.xml"
)
public
class
XxDemo
{
@Autowired
private
Mars
mars
;
@Test
public
void
hi
()
{
System
.
out
.
println
(
mars
.
getAge
());
}
}
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/connector/HttpResponse.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.tomcat.connector
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.Cookie
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.io.PrintWriter
;
import
java.util.Collection
;
import
java.util.Locale
;
/**
* Created by shenhongxi on 16/4/11.
*/
public
class
HttpResponse
implements
HttpServletResponse
{
OutputStream
output
;
HttpRequest
request
;
PrintWriter
writer
;
public
HttpResponse
(
OutputStream
output
)
{
this
.
output
=
output
;
}
public
void
setRequest
(
HttpRequest
request
)
{
this
.
request
=
request
;
}
/**
* call this method to send headers and response to the output
*/
public
void
finishResponse
()
{
// sendHeaders();
// Flush and close the appropriate output mechanism
if
(
writer
!=
null
)
{
writer
.
flush
();
writer
.
close
();
}
}
public
void
addCookie
(
Cookie
cookie
)
{
}
public
boolean
containsHeader
(
String
name
)
{
return
false
;
}
public
String
encodeURL
(
String
url
)
{
return
null
;
}
public
String
encodeRedirectURL
(
String
url
)
{
return
null
;
}
public
String
encodeUrl
(
String
url
)
{
return
null
;
}
public
String
encodeRedirectUrl
(
String
url
)
{
return
null
;
}
public
void
sendError
(
int
sc
,
String
msg
)
throws
IOException
{
}
public
void
sendError
(
int
sc
)
throws
IOException
{
}
public
void
sendRedirect
(
String
location
)
throws
IOException
{
}
public
void
setDateHeader
(
String
name
,
long
date
)
{
}
public
void
addDateHeader
(
String
name
,
long
date
)
{
}
public
void
setHeader
(
String
name
,
String
value
)
{
}
public
void
addHeader
(
String
name
,
String
value
)
{
}
public
void
setIntHeader
(
String
name
,
int
value
)
{
}
public
void
addIntHeader
(
String
name
,
int
value
)
{
}
public
void
setStatus
(
int
sc
)
{
}
public
void
setStatus
(
int
sc
,
String
sm
)
{
}
public
int
getStatus
()
{
return
0
;
}
public
String
getHeader
(
String
name
)
{
return
null
;
}
public
Collection
<
String
>
getHeaders
(
String
name
)
{
return
null
;
}
public
Collection
<
String
>
getHeaderNames
()
{
return
null
;
}
public
String
getCharacterEncoding
()
{
return
null
;
}
public
String
getContentType
()
{
return
null
;
}
public
ServletOutputStream
getOutputStream
()
throws
IOException
{
return
null
;
}
public
PrintWriter
getWriter
()
throws
IOException
{
return
null
;
}
public
void
setCharacterEncoding
(
String
charset
)
{
}
public
void
setContentLength
(
int
len
)
{
}
@Override
public
void
setContentLengthLong
(
long
l
)
{
}
public
void
setContentType
(
String
type
)
{
}
public
void
setBufferSize
(
int
size
)
{
}
public
int
getBufferSize
()
{
return
0
;
}
public
void
flushBuffer
()
throws
IOException
{
}
public
void
resetBuffer
()
{
}
public
boolean
isCommitted
()
{
return
false
;
}
public
void
reset
()
{
}
public
void
setLocale
(
Locale
loc
)
{
}
public
Locale
getLocale
()
{
return
null
;
}
}
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/design/adapter/Adaptee.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.tomcat.design.adapter
;
/**
* Created by shenhongxi on 16/4/14.
*/
public
class
Adaptee
{
public
void
specificRequest
()
{
System
.
out
.
println
(
"specific request"
);
}
}
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/design/decorator/HtmlFilter.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.tomcat.design.decorator
;
/**
* @author javahongxi 具体装饰角色,增加过滤掉HTML标签的功能
*/
public
class
HtmlFilter
extends
MessageBoardDecorator
{
public
HtmlFilter
(
MessageBoardHandler
handler
)
{
super
(
handler
);
}
public
String
filter
(
String
content
)
{
String
temp
=
super
.
filter
(
content
);
temp
+=
"^^过滤掉HTML标签!^^"
;
return
temp
;
}
}
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/design/decorator/Test.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.tomcat.design.decorator
;
/**
* @author javahongxi 客户端测试
*/
public
class
Test
{
public
static
void
main
(
String
[]
args
)
{
MessageBoardHandler
mb
=
new
MessageBoard
();
String
content
=
mb
.
filter
(
"一定要学好装饰模式!"
);
System
.
out
.
println
(
content
);
mb
=
new
HtmlFilter
(
new
SensitiveFilter
(
new
MessageBoard
()));
content
=
mb
.
filter
(
"一定要学好装饰模式!"
);
System
.
out
.
println
(
content
);
}
}
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/embed/servlet/HelloServlet.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.tomcat.embed.servlet
;
import
java.io.IOException
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
@WebServlet
(
name
=
"MyServlet"
,
urlPatterns
=
{
"/hello"
}
)
public
class
HelloServlet
extends
HttpServlet
{
@Override
protected
void
doGet
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
ServletOutputStream
out
=
resp
.
getOutputStream
();
out
.
write
(
"hello heroku"
.
getBytes
());
out
.
flush
();
out
.
close
();
}
}
whatsmars-tomcat/src/main/java/com/itlong/whatsmars/tomcat/servlet/StaticResourceProcessor.java
已删除
100644 → 0
浏览文件 @
c73ad059
package
com.itlong.whatsmars.tomcat.servlet
;
import
java.io.IOException
;
/**
* Created by shenhongxi on 2016/4/12.
*/
public
class
StaticResourceProcessor
{
public
void
process
(
Request
request
,
Response
response
)
{
try
{
response
.
sendStaticResource
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/Bootstrap.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.connector
;
/**
* Created by shenhongxi on 16/4/11.
*/
public
final
class
Bootstrap
{
public
static
void
main
(
String
[]
args
)
{
HttpConnector
connector
=
new
HttpConnector
();
Container
container
=
new
SimpleContainer
();
connector
.
setContainer
(
container
);
connector
.
setBufferSize
(
2048
);
connector
.
start
();
}
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpConnector.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.connector
;
import
java.io.IOException
;
import
java.net.InetAddress
;
import
java.net.ServerSocket
;
import
java.net.Socket
;
/**
* Created by shenhongxi on 16/4/11.
*/
public
class
HttpConnector
implements
Runnable
{
private
Container
container
;
boolean
stopped
;
private
String
scheme
=
"http"
;
private
int
bufferSize
;
public
void
run
()
{
ServerSocket
serverSocket
=
null
;
int
port
=
8080
;
try
{
serverSocket
=
new
ServerSocket
(
port
,
1
,
InetAddress
.
getByName
(
"127.0.0.1"
));
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
System
.
exit
(
1
);
}
while
(!
stopped
)
{
// Accept the next incoming connection from the server socket
Socket
socket
=
null
;
try
{
socket
=
serverSocket
.
accept
();
}
catch
(
Exception
e
)
{
continue
;
}
// Hand this socket off to an HttpProcessor
HttpProcessor
processor
=
new
HttpProcessor
(
this
);
processor
.
process
(
socket
);
}
}
public
void
start
()
{
new
Thread
(
this
).
start
();
}
public
String
getScheme
()
{
return
scheme
;
}
public
int
getBufferSize
()
{
return
bufferSize
;
}
public
void
setBufferSize
(
int
bufferSize
)
{
this
.
bufferSize
=
bufferSize
;
}
public
Container
getContainer
()
{
return
container
;
}
public
void
setContainer
(
Container
container
)
{
this
.
container
=
container
;
}
}
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/connector/HttpHeader.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpHeader.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.connector
;
package
com.whatsmars.tomcat.connector
;
/**
* Created by shenhongxi on 16/4/13.
...
...
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpProcessor.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.connector
;
import
com.whatsmars.tomcat.servlet.StaticResourceProcessor
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.net.Socket
;
/**
* Created by shenhongxi on 16/4/11.
*/
public
class
HttpProcessor
{
private
HttpConnector
connector
;
private
HttpRequest
request
;
private
HttpResponse
response
;
private
HttpRequestLine
requestLine
=
new
HttpRequestLine
();
public
HttpProcessor
(
HttpConnector
connector
)
{
this
.
connector
=
connector
;
}
public
void
process
(
Socket
socket
)
{
SocketInputStream
input
=
null
;
OutputStream
output
=
null
;
try
{
input
=
new
SocketInputStream
(
socket
.
getInputStream
(),
connector
.
getBufferSize
());
// 1.读取套接字的输入流
output
=
socket
.
getOutputStream
();
// create HttpRequest object and parse
request
=
new
HttpRequest
(
input
);
response
=
new
HttpResponse
(
output
);
response
.
setRequest
(
request
);
response
.
setHeader
(
"Server"
,
"Mars Servlet Container"
);
parseRequest
(
input
,
output
);
// 解析请求行,即HTTP请求的第一行内容
parseHeaders
(
input
);
// 解析请求头
if
(
request
.
getRequestURI
().
startsWith
(
"/servlet/"
))
{
connector
.
getContainer
().
invoke
((
HttpServletRequest
)
request
,
(
HttpServletResponse
)
response
);
}
else
{
StaticResourceProcessor
processor
=
new
StaticResourceProcessor
();
//processor.process(request, response);
}
socket
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
private
void
parseHeaders
(
SocketInputStream
input
)
throws
IOException
,
ServletException
{
while
(
true
)
{
// 一行一行解析完header
HttpHeader
header
=
new
HttpHeader
();
// Read the next header
input
.
readHeader
(
header
);
if
(
header
.
nameEnd
==
0
)
{
if
(
header
.
valueEnd
==
0
)
{
return
;
}
else
{
throw
new
ServletException
(
"httpProcessor parseHeaders colon"
);
}
}
String
name
=
new
String
(
header
.
name
,
0
,
header
.
nameEnd
);
String
value
=
new
String
(
header
.
value
,
0
,
header
.
valueEnd
);
request
.
addHeader
(
name
,
value
);
// do something for some headers, ignore others.
if
(
name
.
equals
(
"cookie"
))
{
// ...
// request.addCookie(cookies[i]);
}
else
if
(
name
.
equals
(
"content-length"
))
{
int
n
=
-
1
;
try
{
n
=
Integer
.
parseInt
(
value
);
}
catch
(
Exception
e
)
{
throw
new
ServletException
(
"httpProcessor.parseHeaders.contentLength"
);
}
request
.
setContentLength
(
n
);
}
else
if
(
name
.
equals
(
"content-type"
))
{
request
.
setContentType
(
value
);
}
}
}
private
void
parseRequest
(
SocketInputStream
input
,
OutputStream
output
)
throws
IOException
,
ServletException
{
input
.
readRequestLine
(
requestLine
);
String
method
=
new
String
(
requestLine
.
method
,
0
,
requestLine
.
methodEnd
);
String
uri
=
null
;
String
protocol
=
new
String
(
requestLine
.
protocol
,
0
,
requestLine
.
protocolEnd
);
// Validate the incoming request line
if
(
method
.
length
()
<
1
)
{
throw
new
ServletException
(
"Missing HTTP request method"
);
}
else
if
(
requestLine
.
uriEnd
<
1
)
{
throw
new
ServletException
(
"Missing HTTP request URI"
);
}
// Parse any query parameters out of the request URI
int
question
=
requestLine
.
indexOf
(
"?"
);
if
(
question
>=
0
)
{
request
.
setQueryString
(
new
String
(
requestLine
.
uri
,
question
+
1
,
requestLine
.
uriEnd
-
question
-
1
));
uri
=
new
String
(
requestLine
.
uri
,
0
,
question
);
}
else
{
request
.
setQueryString
(
null
);
uri
=
new
String
(
requestLine
.
uri
,
0
,
requestLine
.
uriEnd
);
}
String
normalizedUri
=
normalize
(
uri
);
((
HttpRequest
)
request
).
setMethod
(
method
);
request
.
setProtocol
(
protocol
);
if
(
normalizedUri
!=
null
)
{
((
HttpRequest
)
request
).
setRequestURI
(
normalizedUri
);
}
else
{
((
HttpRequest
)
request
).
setRequestURI
(
uri
);
}
if
(
normalizedUri
==
null
)
{
throw
new
ServletException
(
"Invalid URI: "
+
uri
+
"'"
);
}
}
// Return a context-relative path, beginning with a "/"
protected
String
normalize
(
String
path
)
{
if
(
path
==
null
)
return
null
;
String
normalized
=
path
;
// ...
return
path
;
}
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/HttpRequestLine.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.connector
;
/**
* Created by shenhongxi on 16/4/13.
*/
public
final
class
HttpRequestLine
{
public
static
final
int
INITIAL_METHOD_SIZE
=
8
;
public
static
final
int
INITIAL_URI_SIZE
=
64
;
public
static
final
int
INITIAL_PROTOCOL_SIZE
=
8
;
public
static
final
int
MAX_METHOD_SIZE
=
1024
;
public
static
final
int
MAX_URI_SIZE
=
32768
;
public
static
final
int
MAX_PROTOCOL_SIZE
=
1024
;
public
char
[]
method
;
public
int
methodEnd
;
public
char
[]
uri
;
public
int
uriEnd
;
public
char
[]
protocol
;
public
int
protocolEnd
;
public
HttpRequestLine
()
{
this
(
new
char
[
INITIAL_METHOD_SIZE
],
0
,
new
char
[
INITIAL_URI_SIZE
],
0
,
new
char
[
INITIAL_PROTOCOL_SIZE
],
0
);
}
public
HttpRequestLine
(
char
[]
method
,
int
methodEnd
,
char
[]
uri
,
int
uriEnd
,
char
[]
protocol
,
int
protocolEnd
)
{
this
.
method
=
method
;
this
.
methodEnd
=
methodEnd
;
this
.
uri
=
uri
;
this
.
uriEnd
=
uriEnd
;
this
.
protocol
=
protocol
;
this
.
protocolEnd
=
protocolEnd
;
}
public
int
indexOf
(
String
str
)
{
// ...
return
-
1
;
}
/**
* Release all object references, and initialize instance variables, in
* preparation for reuse of this object.
*/
public
void
recycle
()
{
methodEnd
=
0
;
uriEnd
=
0
;
protocolEnd
=
0
;
}
}
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/connector/SocketInputStream.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/connector/SocketInputStream.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.connector
;
package
com.whatsmars.tomcat.connector
;
import
java.io.IOException
;
import
java.io.InputStream
;
...
...
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/adapter/Adapter.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.design.adapter
;
/**
* Created by shenhongxi on 16/4/14.
*/
public
class
Adapter
implements
Target
{
Adaptee
adaptee
;
public
void
request
()
{
adaptee
.
specificRequest
();
}
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/adapter/Adapter2.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.design.adapter
;
/**
* Created by shenhongxi on 16/4/14.
*/
public
class
Adapter2
extends
Adaptee
implements
Target
{
// 对于我们不必要实现的方法可在Adaptee中作空实现
public
void
request
()
{
super
.
specificRequest
();
}
}
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/design/decorator/MessageBoard.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/decorator/MessageBoard.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.design.decorator
;
package
com.whatsmars.tomcat.design.decorator
;
/**
* @author javahongxi 用户留言板的具体实现
...
...
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/decorator/MessageBoardDecorator.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.design.decorator
;
/**
* @author javahongxi 装饰角色
*/
public
class
MessageBoardDecorator
implements
MessageBoardHandler
{
private
MessageBoardHandler
handler
;
public
MessageBoardDecorator
(
MessageBoardHandler
handler
)
{
super
();
this
.
handler
=
handler
;
}
public
String
filter
(
String
msg
)
{
return
handler
.
filter
(
msg
);
}
}
\ No newline at end of file
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/design/decorator/SensitiveFilter.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.design.decorator
;
/**
* @author javahongxi 具体装饰角色,增加过滤掉政治敏感字眼的功能
*/
public
class
SensitiveFilter
extends
MessageBoardDecorator
{
public
SensitiveFilter
(
MessageBoardHandler
handler
)
{
super
(
handler
);
}
public
String
filter
(
String
content
)
{
String
temp
=
super
.
filter
(
content
);
temp
+=
"^^过滤掉政治敏感的字眼!^^"
;
return
temp
;
}
}
\ No newline at end of file
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/embed/Main.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/embed/Main.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.embed
;
package
com.whatsmars.tomcat.embed
;
import
java.io.File
;
import
java.net.URISyntaxException
;
...
...
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/server/HttpServer.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/server/HttpServer.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.server
;
package
com.whatsmars.tomcat.server
;
import
java.io.File
;
import
java.io.IOException
;
...
...
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/server/Request.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/server/Request.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.server
;
package
com.whatsmars.tomcat.server
;
import
java.io.IOException
;
import
java.io.InputStream
;
...
...
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/servlet/HttpServer.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/HttpServer.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.servlet
;
package
com.whatsmars.tomcat.servlet
;
import
java.io.IOException
;
import
java.io.InputStream
;
...
...
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/PrimitiveServlet.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.servlet
;
import
javax.servlet.*
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
/**
* Created by shenhongxi on 2016/4/12.
*/
public
class
PrimitiveServlet
implements
Servlet
{
public
void
init
(
ServletConfig
config
)
throws
ServletException
{
System
.
out
.
println
(
"init"
);
}
public
ServletConfig
getServletConfig
()
{
return
null
;
}
public
void
service
(
ServletRequest
req
,
ServletResponse
res
)
throws
ServletException
,
IOException
{
System
.
out
.
println
(
"from service"
);
PrintWriter
out
=
res
.
getWriter
();
out
.
println
(
"Hello. Roses are red."
);
out
.
print
(
"Violets are blue"
);
}
public
String
getServletInfo
()
{
return
null
;
}
public
void
destroy
()
{
System
.
out
.
println
(
"destroy"
);
}
}
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/Request.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.servlet
;
import
javax.servlet.*
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Enumeration
;
import
java.util.Locale
;
import
java.util.Map
;
/**
* Created by shenhongxi on 16/3/21.
*/
public
class
Request
implements
ServletRequest
{
private
InputStream
input
;
private
String
uri
;
// 性能考虑,用byte[]
public
Request
(
InputStream
input
)
{
this
.
input
=
input
;
}
public
void
parse
()
{
StringBuffer
request
=
new
StringBuffer
(
2048
);
int
i
;
byte
[]
buffer
=
new
byte
[
2048
];
try
{
i
=
input
.
read
(
buffer
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
i
=
-
1
;
}
for
(
int
j
=
0
;
j
<
i
;
j
++)
{
request
.
append
((
char
)
buffer
[
j
]);
}
System
.
out
.
println
(
request
.
toString
());
uri
=
parseUri
(
request
.
toString
());
}
private
String
parseUri
(
String
requestStr
)
{
// GET /index.html HTTP/1.1
// Accept: text/plain; text/html
// ...
int
index1
=
requestStr
.
indexOf
(
' '
);
int
index2
;
if
(
index1
!=
-
1
)
{
index2
=
requestStr
.
indexOf
(
' '
,
index1
+
1
);
if
(
index2
>
index1
)
{
return
requestStr
.
substring
(
index1
+
1
,
index2
);
}
}
return
null
;
}
public
String
getUri
()
{
return
uri
;
}
public
Object
getAttribute
(
String
name
)
{
return
null
;
}
public
Enumeration
<
String
>
getAttributeNames
()
{
return
null
;
}
public
String
getCharacterEncoding
()
{
return
null
;
}
public
void
setCharacterEncoding
(
String
env
)
throws
UnsupportedEncodingException
{
}
public
int
getContentLength
()
{
return
0
;
}
@Override
public
long
getContentLengthLong
()
{
return
0
;
}
public
String
getContentType
()
{
return
null
;
}
public
ServletInputStream
getInputStream
()
throws
IOException
{
return
null
;
}
public
String
getParameter
(
String
name
)
{
return
null
;
}
public
Enumeration
<
String
>
getParameterNames
()
{
return
null
;
}
public
String
[]
getParameterValues
(
String
name
)
{
return
new
String
[
0
];
}
public
Map
<
String
,
String
[]>
getParameterMap
()
{
return
null
;
}
public
String
getProtocol
()
{
return
null
;
}
public
String
getScheme
()
{
return
null
;
}
public
String
getServerName
()
{
return
null
;
}
public
int
getServerPort
()
{
return
0
;
}
public
BufferedReader
getReader
()
throws
IOException
{
return
null
;
}
public
String
getRemoteAddr
()
{
return
null
;
}
public
String
getRemoteHost
()
{
return
null
;
}
public
void
setAttribute
(
String
name
,
Object
o
)
{
}
public
void
removeAttribute
(
String
name
)
{
}
public
Locale
getLocale
()
{
return
null
;
}
public
Enumeration
<
Locale
>
getLocales
()
{
return
null
;
}
public
boolean
isSecure
()
{
return
false
;
}
public
RequestDispatcher
getRequestDispatcher
(
String
path
)
{
return
null
;
}
public
String
getRealPath
(
String
path
)
{
return
null
;
}
public
int
getRemotePort
()
{
return
0
;
}
public
String
getLocalName
()
{
return
null
;
}
public
String
getLocalAddr
()
{
return
null
;
}
public
int
getLocalPort
()
{
return
0
;
}
public
ServletContext
getServletContext
()
{
return
null
;
}
public
AsyncContext
startAsync
()
throws
IllegalStateException
{
return
null
;
}
public
AsyncContext
startAsync
(
ServletRequest
servletRequest
,
ServletResponse
servletResponse
)
throws
IllegalStateException
{
return
null
;
}
public
boolean
isAsyncStarted
()
{
return
false
;
}
public
boolean
isAsyncSupported
()
{
return
false
;
}
public
AsyncContext
getAsyncContext
()
{
return
null
;
}
public
DispatcherType
getDispatcherType
()
{
return
null
;
}
}
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/servlet/RequestFacade.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/RequestFacade.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.servlet
;
package
com.whatsmars.tomcat.servlet
;
import
javax.servlet.*
;
import
java.io.BufferedReader
;
...
...
whatsmars-tomcat/src/main/java/com/
itlong/whatsmars/tomcat/server
/Response.java
→
whatsmars-tomcat/src/main/java/com/
whatsmars/tomcat/servlet
/Response.java
浏览文件 @
1b95dbc9
package
com.
itlong.whatsmars.tomcat.server
;
package
com.
whatsmars.tomcat.servlet
;
import
java
.io.File
;
import
java
.io.FileInputStream
;
import
java.io.
IOException
;
import
java.
io.OutputStream
;
import
java
x.servlet.ServletOutputStream
;
import
java
x.servlet.ServletResponse
;
import
java.io.
*
;
import
java.
util.Locale
;
/**
* Created by shenhongxi on 16/3/21.
*/
public
class
Response
{
public
class
Response
implements
ServletResponse
{
private
static
final
int
BUFFER_SIZE
=
1024
;
...
...
@@ -16,11 +16,13 @@ public class Response {
OutputStream
output
;
PrintWriter
writer
;
public
void
sendStaticResource
()
throws
IOException
{
byte
[]
bytes
=
new
byte
[
BUFFER_SIZE
];
FileInputStream
fis
=
null
;
try
{
File
file
=
new
File
(
HttpServer
.
WEB_ROOT
,
request
.
getUri
());
File
file
=
new
File
(
Constants
.
WEB_ROOT
,
request
.
getUri
());
if
(
file
.
exists
())
{
fis
=
new
FileInputStream
(
file
);
int
ch
=
fis
.
read
(
bytes
,
0
,
BUFFER_SIZE
);
...
...
@@ -52,4 +54,71 @@ public class Response {
public
void
setRequest
(
Request
request
)
{
this
.
request
=
request
;
}
public
String
getCharacterEncoding
()
{
return
null
;
}
public
String
getContentType
()
{
return
null
;
}
public
ServletOutputStream
getOutputStream
()
throws
IOException
{
return
null
;
}
public
PrintWriter
getWriter
()
throws
IOException
{
// autoflush is true, println() will flush, but print() will not
writer
=
new
PrintWriter
(
output
,
true
);
return
writer
;
}
public
void
setCharacterEncoding
(
String
charset
)
{
}
public
void
setContentLength
(
int
len
)
{
}
@Override
public
void
setContentLengthLong
(
long
l
)
{
}
public
void
setContentType
(
String
type
)
{
}
public
void
setBufferSize
(
int
size
)
{
}
public
int
getBufferSize
()
{
return
0
;
}
public
void
flushBuffer
()
throws
IOException
{
}
public
void
resetBuffer
()
{
}
public
boolean
isCommitted
()
{
return
false
;
}
public
void
reset
()
{
}
public
void
setLocale
(
Locale
loc
)
{
}
public
Locale
getLocale
()
{
return
null
;
}
}
whatsmars-tomcat/src/main/java/com/
itlong/
whatsmars/tomcat/servlet/ResponseFacade.java
→
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/ResponseFacade.java
浏览文件 @
1b95dbc9
package
com.
itlong.
whatsmars.tomcat.servlet
;
package
com.whatsmars.tomcat.servlet
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.ServletResponse
;
...
...
whatsmars-tomcat/src/main/java/com/whatsmars/tomcat/servlet/ServletProcessor.java
0 → 100644
浏览文件 @
1b95dbc9
package
com.whatsmars.tomcat.servlet
;
import
javax.servlet.Servlet
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
java.io.File
;
import
java.io.IOException
;
import
java.net.URL
;
import
java.net.URLClassLoader
;
import
java.net.URLStreamHandler
;
/**
* Created by shenhongxi on 2016/4/12.
*/
public
class
ServletProcessor
{
public
void
process
(
Request
request
,
Response
response
)
{
String
uri
=
request
.
getUri
();
String
servletName
=
uri
.
substring
(
uri
.
lastIndexOf
(
"/"
)
+
1
);
URLClassLoader
loader
=
null
;
try
{
URL
[]
urls
=
new
URL
[
1
];
URLStreamHandler
streamHandler
=
null
;
File
classPath
=
new
File
(
Constants
.
WEB_ROOT
);
String
repository
=
(
new
URL
(
"file"
,
null
,
classPath
.
getCanonicalPath
()
+
File
.
separator
)).
toString
();
urls
[
0
]
=
new
URL
(
null
,
repository
,
streamHandler
);
loader
=
new
URLClassLoader
(
urls
);
}
catch
(
IOException
E
)
{
E
.
printStackTrace
();
}
Class
myClass
=
null
;
try
{
myClass
=
loader
.
loadClass
(
servletName
);
}
catch
(
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
}
Servlet
servlet
=
null
;
try
{
servlet
=
(
Servlet
)
myClass
.
newInstance
();
RequestFacade
requestFacade
=
new
RequestFacade
(
request
);
ResponseFacade
responseFacade
=
new
ResponseFacade
(
response
);
servlet
.
service
((
ServletRequest
)
requestFacade
,
(
ServletResponse
)
responseFacade
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录