Ticket #95 (new Bug) — at Version 2
r系统调用接口报MongoException: norepl
| Reported by: | sunxiang | Owned by: | sunxiang |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Component: | 报价库 | Version: | 产品库3.0 |
| Keywords: | Connections MongoDB | Cc: | |
| Due Date: | 21/03/2012 |
Description (last modified by sunxiang) (diff)
报错
wap_product_price改版,报价页使用r系统调用接口。在测试中发现会报com.mongodb.MongoException?: norepl,具体如下:

原因
在官网上看到,norepl原来是no replica(没有复制品)的意思,从测试得知只配了一台机。查了一下mongo连接相关的配置,在resin-web.xml中mongo配置如下:,
<env-entry> <description>MongoConfig for 4</description> <env-entry-name>mongoConfig4RClient</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>mongodb://192.168.75.100:5566/price_front_cache?slaveOk=true;maxPoolSize=256;w=2;safe=true</env-entry-value> </env-entry>
其中,w=2;safe=true表示使用安全模式连接到复制组,等待复制操作至少在2台机器完成,但又没有配置复制集,因此报错。
解决
去掉配置中的w=2;safe=true即可。
附上连接相关的配置:
标准的连接字符串格式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
•mongodb:// 必选的前缀,用来标示这是一个标准连接格式的字符串
•username:password@ 可选的。如果有,驱动在连接到数据库服务器后会尝试登录到一个数据库。
•host1 URL的必选部分。它标示了要连接的服务器地址。
•:portX 是可选的。如果没有提供默认连接到:27017.
•/database 要登录的数据库的名称,只有username:password@语法使用后它才有用。如果没有提供,默认使用“admin”。
•?options 是连接的可选项。注意如果database没有提供,在最后一个主机和?符号中间依然需要一个斜杠"/"。可选项是名称=值的配对,他们使用"&"或者";"隔开。
很多主机可能需要指定(连接到复制对/组)。
这些可选项是:
复制组:
•replicaSet=name
•驱动会检查连接到的复制组和这个名称是否匹配。意味着如果给出的主机是种子列表,驱动会尝试找到复制组内所有成员。
单台服务器:
•slaveOk=true|false
其他配置:
•safe=true|false
•true:驱动在执行更新操作后会发送一个getLastError命令确保更新成功(同时查看一下w和wtimeoutMS)。
•false:驱动在每次更新操作后不会发送getLastError命令。
•w=n
•驱动在getLastError命令中增加{w:n}。在safe=true的情况下.
•wtimeoutMS=ms
•驱动在getLastError命令中增加{wtimeout:ms}。在safe=true的情况下.
•fsync=true|false
•true:驱动在getLastError命令中增加{fsync:true}。在safe=true的情况下.
•false:驱动不在getLastError命令中增加同步参数。
•journal=true|false
•同步到日志文件。在safe=true的情况下.
•connectTimeoutMS=ms
•一个连接在超时之前可以保持打开的时间。
•socketTimeoutMS=ms
•套接字上面的发送和接收操作的超时时间。
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/hr/2009/global/images/logo.gif)

MongoException?: norepl