一個綜合的分佈式項目之項目環境準備

    統一JDK爲1.7
java

    tomcat端口上下游各爲8080和8088,其餘服務端口默認
mysql

    開發工具eclipse
git

    版本控制git(爲方便公網查看,初期會託管到github)
github

    其餘各項服務暫時不用啓動,先建立項目。
redis

    建立maven項目相信看到這的oscer都會,這裏就不贅述,主要貼出一些配置文件(限於篇幅隨意貼了點,所有的請看github上)。spring

github地址:https://github.com/shang7053/base/tree/master/sustainable-parent sql

同時導入一份到osc-git,地址:http://git.oschina.net/loveliyiyi/basemongodb

    這篇博客改了好屢次,最終仍是決定不貼上配置信息,由於一方面佔用篇幅太大,還有一方面他在博客裏並無太多意義,只有用到的時候再貼就行了。
數據庫

    基本環境如上所述,如今用文字說明一下各項目之間的關係。
apache

    首先是parent項目,這個項目集成了一些基本的依賴,好比spring相關、MQ、junit等等,是公共的依賴。

    而後是sustainable-interactive,這個項目集成了redis以及springmvc等依賴。

    最後是sustainable-service,這個就多了,有mybatis的、有mongo的等等。

    至於common的包基本上也就放點工具包,服務接口之類的,可能會用到好比gson的第三方工具,倒沒什麼可說的。

    還有一個就是各類配置文件,大部分集成到spring,小部分是基於之前本身寫的工具包,好比redis,由於爲了方便切換緩存,搞了一個公共的緩存接口,而後本身用oscache或者ehcache或者redis實現,因此這裏就直接拿來用了。

    最後就是頁面了,登錄註冊也沒啥,最原生態的標籤,因此頁面看着……基本能用吧,就不獻醜了。

    貼一下spring的配置文件吧,看這個估計就差很少了。

    sustainable-interactive

context:annotation-config />
	<context:component-scan base-package="sustainable.interactive" />
	<tx:annotation-driven/>
	<import resource="dubbo-customer.xml"/>
	<context:property-placeholder location="classpath:redis.properties" />  
  
    <import resource="mq.xml"/>

dubbo-customer.xml

<!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方同樣 -->
	<dubbo:application name="dubbo_consumer" />

	<!-- 使用zookeeper註冊中心暴露服務地址 -->
	<dubbo:registry address="zookeeper://zookeeper.sustainable.com:2181" />

	<!-- 生成遠程服務代理,能夠像使用本地bean同樣使用demoService		xml配置時使用
	<dubbo:reference id="userDao" interface="scc.common.user.IUserDao" /> -->
	<!-- 掃描註解包路徑,多個包用逗號分隔,不填pacakge表示掃描當前ApplicationContext中全部的類 -->
	<dubbo:annotation package="sustainable.interactive" />

mq.xml

<!-- 基本配置開始 -->
    <!-- 鏈接工廠 -->
	<bean id="connectinFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<!-- 配置鏈接 -->
		<property name="brokerURL" value="tcp://activeMq.sustainable.com:61616" />
	</bean>
	<!-- spring管理鏈接的工廠 -->
	<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
		<!-- 目標ConnectionFactory對應真實的能夠產生JMS Connection的ConnectionFactory -->
		<property name="targetConnectionFactory" ref="connectinFactory"></property>
		<!-- Session緩存數量 -->
		<property name="sessionCacheSize" value="10"></property>
	</bean>
	<!-- Spring JMS Template 配置JMS模版 -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="cachingConnectionFactory" />
	</bean>
	<!-- 註冊消息轉換器 -->
	<bean id="messageConverter" class="sustainable.common.util.jms.SustainableMessageConverter"/>
	<!-- 基本配置結束 -->
	
	<!-- 註冊隊列開始 -->
	<!-- 註冊Queue隊列:僅有一個訂閱者會收到消息,消息一旦被處理就不會存在隊列中 -->
	<bean id="registQueue" class="org.apache.activemq.command.ActiveMQQueue">
		<!-- 隊列名稱 -->
		<constructor-arg value="regist.notify"></constructor-arg>
	</bean>
	<!-- 使用Spring JmsTemplate 的消息生產者 -->
	<bean id="registQueueMessageProducer" class="sustainable.common.util.jms.QueueMessageProducer">
		<property name="jmsTemplate" ref="jmsTemplate"></property>
		<property name="queue" ref="registQueue"></property>
		<property name="messageConverter" ref="messageConverter"></property>
	</bean>
	<!-- 註冊隊列結束 -->

sustainable-service

<context:annotation-config />
	<context:component-scan base-package="sustainable.service" />
	<!-- 數據源 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUrl" value="jdbc:mysql://mysql.sustainable.com:3306/test" />
		<property name="user" value="root" />
		<property name="password" value="1234" />
		<!--鏈接池中保留的最小鏈接數。 -->
		<property name="minPoolSize" value="1" />
		<!--鏈接池中保留的最大鏈接數。Default: 15 -->
		<property name="maxPoolSize" value="5" />
		<!--初始化時獲取的鏈接數,取值應在minPoolSize與maxPoolSize之間。Default: 3 -->
		<property name="initialPoolSize" value="3" />
		<!--最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄。Default: 0 -->
		<property name="maxIdleTime" value="60" />
		<!--當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數。Default: 3 -->
		<property name="acquireIncrement" value="5" />
		<!--JDBC的標準參數,用以控制數據源內加載的PreparedStatements數量。但因爲預緩存的statements 屬於單個connection而不是整個鏈接池。因此設置這個參數須要考慮到多方面的因素。 若是maxStatements與maxStatementsPerConnection均爲0,則緩存被關閉。Default: 
			0 -->
		<property name="maxStatements" value="0" />
		<!--每60秒檢查全部鏈接池中的空閒鏈接。Default: 0 -->
		<property name="idleConnectionTestPeriod" value="60" />
		<!--定義在從數據庫獲取新鏈接失敗後重復嘗試的次數。Default: 30 -->
		<property name="acquireRetryAttempts" value="30" />
		<!--獲取鏈接失敗將會引發全部等待鏈接池來獲取鏈接的線程拋出異常。可是數據源仍有效 保留,並在下次調用getConnection()的時候繼續嘗試獲取鏈接。若是設爲true,那麼在嘗試 獲取鏈接失敗後該數據源將申明已斷開並永久關閉。Default: 
			false -->
		<property name="breakAfterAcquireFailure" value="true" />
		<!--因性能消耗大請只在須要的時候使用它。若是設爲true那麼在每一個connection提交的 時候都將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable 等方法來提高鏈接測試的性能。Default: 
			false -->
		<property name="testConnectionOnCheckout" value="false" />
	</bean>
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- mapper.xml文件對應的接口 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="sustainable.service.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>
	<!-- 註解事物 -->
	<tx:annotation-driven />
	<aop:aspectj-autoproxy />
	<import resource="dubbo_provider.xml" />
	<import resource="mq.xml" />
	<import resource="mongo-config.xml"/>

dubbo_provider.xml

<!-- 提供方應用信息,用於計算依賴關係 -->
	<dubbo:application name="dubbo_provider" />

	<!-- 使用zookeeper註冊中心暴露服務地址 -->
	<dubbo:registry address="zookeeper://zookeeper.sustainable.com:2181" />

	<!-- 用dubbo協議在20880端口暴露服務 -->
	<dubbo:protocol name="dubbo" port="20880" />

	<!-- 聲明須要暴露的服務接口 		xml式配置
	<dubbo:service interface="scc.common.user.IUserDao" ref="userDaoImpl" />-->
	<!-- 掃描註解包路徑,多個包用逗號分隔,不填pacakge表示掃描當前ApplicationContext中全部的類 -->
	<dubbo:annotation package="sustainable.service.service" />

mq.xml

<!-- 基本配置開始 -->
	<!-- ActiveMQ 鏈接工廠 -->
	<bean id="connectinFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="tcp://activeMq.sustainable.com:61616" />
	</bean>
	<!-- Spring用於管理真正的ConnectionFactory的ConnectionFactory -->
	<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
		<!-- 目標ConnectionFactory對應真實的能夠產生JMS Connection的ConnectionFactory -->
		<property name="targetConnectionFactory" ref="connectinFactory"></property>
		<!-- Session緩存數量 -->
		<property name="sessionCacheSize" value="10"></property>
	</bean>
	<!-- Spring JMS Template 配置JMS模版 -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="cachingConnectionFactory" />
	</bean>
	<!-- 註冊消息轉換器 -->
	<bean id="messageConverter" class="sustainable.common.util.jms.SustainableMessageConverter"/>
	<!-- 基本配置結束 -->
	
	<!-- 註冊隊列開始 -->
	<!-- 註冊Queue隊列:僅有一個訂閱者會收到消息,消息一旦被處理就不會存在隊列中 -->
	<bean id="registQueue" class="org.apache.activemq.command.ActiveMQQueue">
		<!-- 隊列名稱 -->
		<constructor-arg value="regist.notify"></constructor-arg>
	</bean>
	<!-- 消息處理 -->
	<bean id="registDealJmsMessage" class="sustainable.service.jms.RegistDeal"/>
	<!-- 異步接收消息處理類 -->
	<bean id="registQueueMessageListener" class="sustainable.common.util.jms.QueueMessageListener">
		<property name="dealJmsMessage" ref="registDealJmsMessage"></property>
	</bean>
	<!-- 消息監聽容器 -->
	<bean id="registQueueContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="connectinFactory"></property>
		<property name="destination" ref="registQueue"></property>
		<property name="messageListener" ref="registQueueMessageListener"></property>
	</bean>
	<!-- 註冊隊列結束 -->
	
	<!-- 同步user隊列開始 -->
	<!-- 註冊Queue隊列:僅有一個訂閱者會收到消息,消息一旦被處理就不會存在隊列中 -->
	<bean id="syncUserQueue" class="org.apache.activemq.command.ActiveMQQueue">
		<!-- 隊列名稱 -->
		<constructor-arg value="syncUser.notify"></constructor-arg>
	</bean>
	<!-- 使用Spring JmsTemplate 的消息生產者 -->
	<bean id="syncUserQueueMessageProducer" class="sustainable.common.util.jms.QueueMessageProducer">
		<property name="jmsTemplate" ref="jmsTemplate"></property>
		<property name="queue" ref="syncUserQueue"></property>
		<property name="messageConverter" ref="messageConverter"></property>
	</bean>
	<!-- 同步user隊列結束 -->
	
	<!-- 同步user隊列開始 -->
	<!-- 消息處理 -->
	<bean id="syncUserDealJmsMessage" class="sustainable.service.jms.SyncUserDealJmsMessage"/>
	<!-- 異步接收消息處理類 -->
	<bean id="syncUserQueueMessageListener" class="sustainable.common.util.jms.QueueMessageListener">
		<property name="dealJmsMessage" ref="syncUserDealJmsMessage"></property>
	</bean>
	<!-- 消息監聽容器 -->
	<bean id="syncUserQueueContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="connectinFactory"></property>
		<property name="destination" ref="syncUserQueue"></property>
		<property name="messageListener" ref="syncUserQueueMessageListener"></property>
	</bean>
	<!-- 同步user隊列結束 -->

mongo-config.xml

<!-- Default bean name is 'mongo' -->
	<mongo:mongo host="mongo.sustainable.com" port="27017" />
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg ref="mongo" />
		<constructor-arg name="databaseName" value="test" />
	</bean>

頁面仍是上個圖好了

相關文章
相關標籤/搜索