小编Edw*_*ale的帖子

从ActiveMQ触发PHP

背景: 我们当前的系统涉及两个服务(一个用Java编写,另一个用PHP编写),它们使用HTTP回调相互通信.我们希望使用ActiveMQ(或其他,如果需要)从HTTP回调迁移到基于消息的体系结构.我们可能会使用STOMP在它们之间进行通信.最终,PHP服务将用Java重写,但这不是该项目的一部分.

问题: ActiveMQ系统如何通知PHP已将新消息发布到PHP系统订阅的队列?在当前系统中,回调固有地调用PHP并触发它.这消失了基于消息的架构.

可能的解决方案:

  • Cron定期调用一个检查新消息的PHP脚本.呸.
  • 一个长期运行的PHP进程,它循环并休眠并检查新消息.少呀?
  • 发布新消息时,ActiveMQ调用PHP脚本.好,怎么样?
  • ??

php java activemq-classic stomp message-queue

6
推荐指数
1
解决办法
3309
查看次数

这是一种常见的设计模式吗?"描述符模式"?

我正在做一个常见的设计模式吗?如果是这样,那叫什么名字?

我有一个复杂的对象,其中包含字符串和字符串列表等"简单"字段以及其他复杂对象.我想将此对象的实例添加到JMS消息队列,这意味着它们必须是Serializable.我不想制作整个对象图Serializable,所以我选择制作"Descriptor"对象,其中包含构建复杂对象的必要信息和可以创建对象的"Builder"对象.现在,我序列化"Descriptor"对象并将其添加到队列中.当对象出列时,它使用"Builder"构建到一个完整的对象中.

需要注意的重要一点是,对象是在其他系统上运行的作业.消息队列是一种方式,序列化仅发生在作业生命周期的开始.

java design-patterns

6
推荐指数
2
解决办法
2271
查看次数

是直接使用Object.wait和Object.notify代码的味道?

这可能是有争议的,但我刚刚意识到我很少使用等待并直接通知.相反,我使用包中的一些更高级别的构造java.util.concurrent.是否存在等待和通知是唯一解决方案的用例,还是应该仅在构建更高级别的构造时使用它们?

java concurrency

6
推荐指数
1
解决办法
164
查看次数

预填充UICollectionView单元重用队列

问题

我有一个单一的应用程序,UICollectionView第一次滚动它时会出现口吃.我已经将源缩小到新单元(2)被创建(使用initWithFrame:)的事实,因为没有单元可以重复使用.在初始滚动之后,重用队列不为空,并且可以重复使用单元格,并且没有卡顿.

哈克

所以我已经能够借助iOS运行时头中的私有方法解决问题:

- (void)_reuseCell:(id)arg1;
Run Code Online (Sandbox Code Playgroud)

我的假设是,这是将单元格添加回重用队列的位置.使用这个未记录的方法的黑客看起来像这样:

int prefillCellCount = 10;
NSMutableArray *cells = [[NSMutableArray alloc] initWithCapacity:prefillCellCount];
for (int i=0; i<10prefillCellCount i++) {
    UICollectionViewCell *cell = [self.gridView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
    [cells addObject:cell];
}
for (UICollectionViewCell *cell in cells) {
    [self.gridView _reuseCell:cell];
}
Run Code Online (Sandbox Code Playgroud)

黑客工作!滚动时没有口吃.

问题

我不认为我能够通过这个黑客攻击App Store评论员.有没有办法在不使用未记录的方法的情况下做到这一点?如果没有,我唯一的办法就是混淆黑客攻击?

performance objective-c ios uicollectionview

6
推荐指数
1
解决办法
1237
查看次数

在Scala中,我可以覆盖包含列表的具体字段并在子类中附加一些内容吗?

这是我所拥有的类的简化:

trait RequiredThings {
  val requiredThings: Seq[String]
}

class SimpleCalculator with RequiredThings {
  val requiredThings = List("a", "b")
}

class ComplicatedCalculator extends SimpleCalculator with RequiredThings {
  self: SimpleCalculator =>
  override val requiredThings:List[String] = List("c") ::: self.requiredThings
}
Run Code Online (Sandbox Code Playgroud)

在这个版本中,我使用的是自我类型的注释,但我不是完全肯定的,这是要走的路.我想我可以通过转换requiredThings为一个方法来让它工作,但我想尝试它作为一个领域.

最终解决方案

trait RequiredThings {
  def requiredThings: Seq[String]
}

class SimpleCalculator with RequiredThings {
  def requiredThings = List("a", "b")
}

class ComplicatedCalculator extends SimpleCalculator with RequiredThings {
  override def requiredThings:List[String] = List("c") ::: super.requiredThings
}
Run Code Online (Sandbox Code Playgroud)

scala

5
推荐指数
1
解决办法
546
查看次数

Stomp的MessageMap格式完全无法使用吗?

我将Java中的MapMessages发送到ActiveMQ并使用PHP中的Stomp检索它们.我的消息创建代码如下所示:

MapMessage message = session.createMapMessage();
message.setInt("id", 42);
message.setInt("status", 42);
message.setString("result", "aString");
Run Code Online (Sandbox Code Playgroud)

当我在PHP中检索它们时,创建的数组如下所示:

Array (
[map] => Array (
        [0] => Array (
                [entry] => Array (
                        [0] => Array (
                                [string] => id
                                [int] => 42
                            )

                        [1] => Array (
                                [string] => status
                                [int] => 42
                            )

                        [2] => Array (
                                [string] => Array (
                                        [0] => result
                                        [1] => aString
                                    )
                            )
                    )
            )
    )
)
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?有没有办法说服Stomp以合理的方式反序化它,还是有一些PHP咒语让访问这个数组不那么痛苦?特别是,我不能只是迭代条目并构建一个关联数组,因为如果有一个字符串&int而不是两个字符串,那么数组看起来完全不同.

php java json activemq-classic stomp

5
推荐指数
1
解决办法
414
查看次数

触发“对等方重置连接”

我想测试当发生“对等方重置连接”错误时我们的应用程序(嵌入式 ftp 服务器)中发生的日志记录。这篇文章很好地解释了错误的根源,但没有真正解释如何导致错误。有谁知道如何触发 TCP 连接的此错误?

testing ftp tcp

5
推荐指数
1
解决办法
4409
查看次数

使用acts_as_taggable_on为模型创建夹具数据

我正在使用acts_as_taggable_on插件为我的Framework模型提供标记.我已经获得了Rails生成的功能测试,以及它使用的灯具,我想扩展它们以添加一些标签,以便我可以通过标签等来测试搜索.

我是否必须为taggingstag表创建灯具并在功能测试的顶部加载它们?如果是这样,我该怎么做?我没有理解这里描述的关系的语法.Framework在测试搜索行为之前,另一种方法是获取实例并将标记添加到其中吗?或者,如果我这样做,Rails的神会让我失望吗?

testing ruby-on-rails fixtures acts-as-taggable-on

5
推荐指数
3
解决办法
2136
查看次数

特定于测试的应用程序子类

在使用gradle构建时,是否可以使用仅用于测试的Application子类?我在Gradle构建系统之前已经做过类似的事情了,但我现在找不到办法.问题似乎是不可能自定义AndroidManifest.xml用于仪器测试APK.

android android-testing android-gradle-plugin

5
推荐指数
1
解决办法
315
查看次数

使用Mortar + Flow从对话框获取用户输入

我用Mortar + Flow构建我的应用程序.我正在试图找出显示弹出窗口的正确方法,该弹出窗口请求用户提供一些文本.我创建了这个弹出类:

public class SavedPageTitleInputPopup implements Popup<SavedPageTitleInput, Optional<String>> {

private final Context context;

private AlertDialog dialog;

public SavedPageTitleInputPopup(Context context) {
    this.context = context;
}

@Override public Context getContext() {
    return context;
}

@Override
public void show(final SavedPageTitleInput info, boolean withFlourish,
                 final PopupPresenter<SavedPageTitleInput, Optional<String>> presenter) {
    if (dialog != null) throw new IllegalStateException("Already showing, can't show " + info);

    final EditText input = new EditText(context);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                                                                 LinearLayout.LayoutParams.MATCH_PARENT);
    input.setLayoutParams(lp);
    input.setText(info.savedPage.getName());

    dialog = new AlertDialog.Builder(context).setTitle(info.title)
                                             .setView(input) …
Run Code Online (Sandbox Code Playgroud)

java android mortar square-flow

5
推荐指数
1
解决办法
692
查看次数