- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个POC来检查Streaming API的稳定性,POC如下
程序 1:订阅针对 Account 对象创建的 pushtopic程序 2:每 10 分钟间隔创建、更新和删除单个记录
这两个程序都持续运行超过 12 小时(过夜),之后我验证是否收到所有通知,发现一段时间后(在这种情况下将近 ~ 2 小时 45 分钟)没有通知收到了,我重复了两次,这两种情况都在一段时间后停止接收通知。
使用的测试代码
流式 API 客户端(使用 EMP 连接器)
public class SFPoc {
static Long count = 0L;
static Long Leadcount = 0L;
public static void main(String[] argv) throws Exception {
String userName = "<user_name>";
String password = "<pwd>";
String pushTopicName = "/topic/AccountPT";
String pushTopicNameLead = "/topic/Leadwhere";
long replayFrom = EmpConnector.REPLAY_FROM_EARLIEST;
String securityToken = "<token>";
BayeuxParameters custom = getBayeuxParamWithSpecifiedAPIVersion("37.0");
BayeuxParameters params = null;
try {
params = login(userName, password + securityToken, custom);
} catch (Exception e) {
e.printStackTrace();
}
Consumer<Map<String, Object>> consumer = event -> System.out.println(String.format("Received:\n%s ** Recieved at %s, event count total %s", event, LocalDateTime.now() , ++count));
Consumer<Map<String, Object>> consumerLead = event -> System.out.println(String.format("****** LEADS ***** Received:\n%s ** Recieved at %s, event count total %s", event, LocalDateTime.now() , ++Leadcount));
EmpConnector connector = new EmpConnector(params);
connector.start().get(10, TimeUnit.SECONDS);
TopicSubscription subscription = connector.subscribe(pushTopicName, replayFrom, consumer).get(10, TimeUnit.SECONDS);
TopicSubscription subscriptionLead = connector.subscribe(pushTopicNameLead, replayFrom, consumerLead).get(10, TimeUnit.SECONDS);
System.out.println(String.format("Subscribed: %s", subscription));
System.out.println(String.format("Subscribed: %s", subscriptionLead));
}
private static BayeuxParameters getBayeuxParamWithSpecifiedAPIVersion(String apiVersion) {
BayeuxParameters params = new BayeuxParameters() {
@Override
public String version() {
return apiVersion;
}
@Override
public String bearerToken() {
return null;
}
};
return params;
}
定期执行记录创建/更新/删除以生成事件的代码
import com.sforce.soap.enterprise.*;
import com.sforce.soap.enterprise.Error;
import com.sforce.soap.enterprise.sobject.Account;
import com.sforce.soap.enterprise.sobject.Contact;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;
import java.time.LocalDateTime;
public class SFDCDataAdjustment {
static final String USERNAME = "<username>";
static final String PASSWORD = "<pwd&securitytoken>";
static EnterpriseConnection connection;
static Long count = 0L;
public static void main(String[] args) {
ConnectorConfig config = new ConnectorConfig();
config.setUsername(USERNAME);
config.setPassword(PASSWORD);
//config.setTraceMessage(true);
try {
connection = Connector.newConnection(config);
// display some current settings
System.out.println("Auth EndPoint: "+config.getAuthEndpoint());
System.out.println("Service EndPoint: "+config.getServiceEndpoint());
System.out.println("Username: "+config.getUsername());
System.out.println("SessionId: "+config.getSessionId());
// run the different examples
while (true) {
createAccounts();
updateAccounts();
deleteAccounts();
Thread.sleep(1 * 10 * 60 * 1000);
}
} catch (ConnectionException e1) {
e1.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// queries and displays the 5 newest contacts
private static void queryContacts() {
System.out.println("Querying for the 5 newest Contacts...");
try {
// query for the 5 newest contacts
QueryResult queryResults = connection.query("SELECT Id, FirstName, LastName, Account.Name " +
"FROM Contact WHERE AccountId != NULL ORDER BY CreatedDate DESC LIMIT 5");
if (queryResults.getSize() > 0) {
for (int i=0;i<queryResults.getRecords().length;i++) {
// cast the SObject to a strongly-typed Contact
Contact c = (Contact)queryResults.getRecords()[i];
System.out.println("Id: " + c.getId() + " - Name: "+c.getFirstName()+" "+
c.getLastName()+" - Account: "+c.getAccount().getName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// create 5 test Accounts
private static void createAccounts() {
System.out.println("Creating a new test Account...");
Account[] records = new Account[1];
try {
// create 5 test accounts
for (int i=0;i<1;i++) {
Account a = new Account();
a.setName("OptyAccount "+i);
records[i] = a;
}
// create the records in Salesforce.com
SaveResult[] saveResults = connection.create(records);
// check the returned results for any errors
for (int i=0; i< saveResults.length; i++) {
if (saveResults[i].isSuccess()) {
System.out.println(i+". Successfully created record - Id: " + saveResults[i].getId() + "At " + LocalDateTime.now());
System.out.println("************Event Count************" + ++count);
} else {
Error[] errors = saveResults[i].getErrors();
for (int j=0; j< errors.length; j++) {
System.out.println("ERROR creating record: " + errors[j].getMessage());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// updates the 5 newly created Accounts
private static void updateAccounts() {
System.out.println("Update a new test Accounts...");
Account[] records = new Account[1];
try {
QueryResult queryResults = connection.query("SELECT Id, Name FROM Account ORDER BY " +
"CreatedDate DESC LIMIT 1");
if (queryResults.getSize() > 0) {
for (int i=0;i<queryResults.getRecords().length;i++) {
// cast the SObject to a strongly-typed Account
Account a = (Account)queryResults.getRecords()[i];
System.out.println("Updating Id: " + a.getId() + " - Name: "+a.getName());
// modify the name of the Account
a.setName(a.getName()+" -- UPDATED");
records[i] = a;
}
}
// update the records in Salesforce.com
SaveResult[] saveResults = connection.update(records);
// check the returned results for any errors
for (int i=0; i< saveResults.length; i++) {
if (saveResults[i].isSuccess()) {
System.out.println(i+". Successfully updated record - Id: " + saveResults[i].getId() + "At " + LocalDateTime.now());
System.out.println("************Event Count************" + ++count);
} else {
Error[] errors = saveResults[i].getErrors();
for (int j=0; j< errors.length; j++) {
System.out.println("ERROR updating record: " + errors[j].getMessage());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// delete the 5 newly created Account
private static void deleteAccounts() {
System.out.println("Deleting new test Accounts...");
String[] ids = new String[1];
try {
QueryResult queryResults = connection.query("SELECT Id, Name FROM Account ORDER BY " +
"CreatedDate DESC LIMIT 1");
if (queryResults.getSize() > 0) {
for (int i=0;i<queryResults.getRecords().length;i++) {
// cast the SObject to a strongly-typed Account
Account a = (Account)queryResults.getRecords()[i];
// add the Account Id to the array to be deleted
ids[i] = a.getId();
System.out.println("Deleting Id: " + a.getId() + " - Name: "+a.getName());
}
}
// delete the records in Salesforce.com by passing an array of Ids
DeleteResult[] deleteResults = connection.delete(ids);
// check the results for any errors
for (int i=0; i< deleteResults.length; i++) {
if (deleteResults[i].isSuccess()) {
System.out.println(i+". Successfully deleted record - Id: " + deleteResults[i].getId() + "At " + LocalDateTime.now());
System.out.println("************Event Count************" + ++count);
} else {
Error[] errors = deleteResults[i].getErrors();
for (int j=0; j< errors.length; j++) {
System.out.println("ERROR deleting record: " + errors[j].getMessage());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
进一步的更新得到了下面提到的错误,之后通知是
2017-03-09T19:30:28.346 错误 [com.salesforce.emp.connector.EmpConnector] - 连接失败,正在重新连接org.cometd.common.TransportException: {httpCode=503} 在 org.cometd.client.transport.LongPollingTransport$2.onComplete(LongPollingTransport.java:278) 在 org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:193)
在重新连接之后也发生了握手,但错误似乎在重新订阅()中 EMP 连接器似乎由于某种原因无法重新订阅
注意我正在使用 EMP connetor 的“resubscribe-on-disconnect”分支
最佳答案
我们已确定在 403 案例中服务器端存在错误。 Streaming API 使用 session 路由 cookie,此 cookie 会定期过期。当它过期时, session 被路由到另一台服务器,并以 403 响应。在当前版本中,此 403 响应不包括连接建议,客户端不会尝试重新连接。这已得到修复,修复程序目前正在运行。我的理解是,这应该可以解决客户端出现的重新连接问题。
关于api - Salesforce EMP 连接器,一段时间后停止接收通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42432553/
我有一个查询,可以根据数据库获取开始日期和结束日期的所有员工职责。基本上 table 就像 Emp 职责 开始日期 结束日期 我应该为日期提供索引吗?什么样的等等?使数据库级别的事情变得更容易(对我来
SELECT max(a.salary) as salary FROM tbl_emp as a, tbl_emp as b WHERE a.salary < b.salary and a.dept_
我是 Angular 应用程序的新手。 当用户在文本框中输入详细信息并单击添加按钮然后在 Emplist 表中再次添加该行时单击该添加按钮添加同一行如何修复它给我一个建议,还有一个是用户未输入员工的任
我正在使用 ORACLE 的 Emp/Dept 数据库。如果有人不知道,这是结构: CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
我正在做一个POC来检查Streaming API的稳定性,POC如下 程序 1:订阅针对 Account 对象创建的 pushtopic程序 2:每 10 分钟间隔创建、更新和删除单个记录 这两个程
我有 emp 表,KING 是公司的首席执行官,他没有经理。KING 应该获得排名“1”。KING 是 JONES、CLARK、BLAKE 的经理。所以这些将获得 RANK '2'......等等。
我的程序只是简单地增加工资 int emp 类抛出函数 increase但是我在该行的调用函数行中遇到了这个错误:没有合适的构造函数来将 int 转换为 emp 这是我的代码: #include #
如何使用GreenDao执行“从emp选择不同的ename” 我正在尝试使用GreenDao获得sqlite DB列的不同值。我该怎么做?任何帮助表示赞赏。 最佳答案 您必须使用原始查询,例如: pr
我正在尝试构建一个触发器,不允许用户向员工提供高于 10,000 的薪水,但如果员工是经理,我不希望用户能够提供低于 15000 的薪水。 到目前为止我达到的是以下内容 create or repla
我的 apex oracle 数据库中有一个表 EMP,其中包含名为 sal 的薪水属性。我有另一个表 EMPSAL,它有 3 个名为 averageSal、minSal、maxSal 的属性,每当对
当我尝试创建数据库时出现错误 用户 '@'localhost 访问数据库 emp 被拒绝 当我查询显示补助金时 mysql> show grants; +-----------------------
我尝试了有关堆栈溢出的不同解决方案,但无法解决此问题。 这是我的代码 var mongoose = require('mongoose'); var schema = new mongoose.Sch
我是 Pig 和 Hadoop 世界的新手。我遇到的问题可能很简单,但我无法继续。 所以我有下面的数据,这些数据基本上是一天的数据。我需要使用 PIG 计算员工一天花费的总小时数,即第一次上类时间(他
(function() { var Emp = function(_name, _salary) { var name = _name; var salary = _salary
这是 question 的延续 我已将 Query 命名为 select new Emp(o.empNo, o.empName) from Emp o 构造函数定义为 public Emp(Stri
这是我的第一个 jsp Web 应用程序。我有一个 html 页面,其中发布了 jsp 页面接收的一些信息。 机器统计: 64bit machine Windows 7 64bit Netbeans
我正在使用 Go 1.13 Postgres 11 和 GraphQL 我正在尝试运行三个不同的查询: 1. 在某些条件为真时获取少数员工的详细信息。 2. 获取所有员工的所有详细信息。 3. 在匹配
我在该单元格中有一个 UITableviewCell,我添加了 name、emp_id 和 UIImageview 来显示数据我有2个网址,其中一个网址显示名称和emp_id's,另一个网址沿emp_
结构体: 我一直在其所属位置传递hbm和cfg文件。 我的cfg和hbm文件都在src .. enter image description here的根目录下 还包括所有罐子。enter image
我使用 emp-connector 来使用 salesforce straming API,我从 salesforce 文档中的 LogingExample 及其 API 版本 36.0 的工作文件开
我是一名优秀的程序员,十分优秀!