我测试了一个套接字连接程序,其中套接字连接本身是一个单独的线程,然后它将排队,另一个单独的线程用于dbprocessor将从队列中选择并运行一些sql语句。所以我注意到这里是db处理的瓶颈。我想得到一些想法是我正在做正确的架构,或者我应该改变或改进我的设计流程?哪一个适合的架构?
要求是通过套接字连接捕获数据并通过db进程运行,然后相应地存储它。
public class cServer
{
private LinkedBlockingQueue<String> databaseQueue = new LinkedBlockingQueue<String>();
class ConnectionHandler implements Runnable {
ConnectionHandler(Socket receivedSocketConn1) {
this.receivedSocketConn1=receivedSocketConn1;
}
// gets data from an inbound connection and queues it for databse update
public void run(){
databaseQueue.add(message); // put to db queue
}
}
class DatabaseProcessor implements Runnable {
public void run(){
// open database connection
createConnection();
while (true){
message = databaseQueue.take(); // keep taking message from the queue add by connectionhandler and here I will have a number of queries to run in terms of select,insert and updates.
}
}
void createConnection(){
System.out.println("Crerate Connection");
connCreated = new Date();
try{
dbconn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1?"+"user=user1&password=*******");
dbconn.setAutoCommit(false);
}
catch(Throwable ex){
ex.printStackTrace(System.out);
}
}
}
public void main()
{
new Thread(new DatabaseProcessor()).start(); //calls the DatabaseProcessor
try
{
final ServerSocket serverSocketConn = new ServerSocket(8000);
while (true){
try{
Socket socketConn1 = serverSocketConn.accept();
new Thread(new ConnectionHandler(socketConn1)).start();
}
catch(Exception e){
e.printStackTrace(System.out);
}
}
}
catch (Exception e){
e.printStackTrace(System.out);
}
}
}
架构_必须由它的要求来驱动。由于您没有给出任何要求,所以确定提议的架构的适用性的唯一方法是它是否完全无法工作,或者它会如何。 – cdeszaq 2012-03-01 18:37:11
您的队列在哪里/如何定义?线程安全吗?它是同步的吗? – 2012-03-01 18:50:18
@alek我已经添加了类名cServer,下面是我定义队列的地方 – user837306 2012-03-01 18:57:17